首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java String 常用方法與核心注意事項全攻略

     編輯:Java 相關知識

一、Java String 常用方法實戰

1. split() 方法:字符串分割利器

按正則表達式分割字符串,返回字符串數組。實戰範例:費用單據驗證中提取費用 ID 列表。

private boolean isSameSelCode(Fbillconfirm fbillconfirm, HashMap outputParam) {
    String strExpenseID = new String();
    Fbillconfirmdetail[] fbillconfirmdetail = fbillconfirm.getFbillconfirmdetail();
    if (fbillconfirmdetail != null && fbillconfirmdetail.length > 0) {
        for (int i = 0; i < fbillconfirmdetail.length; i++) {
            // 非 Delete 狀態需校驗費用
            if (!Constants.DELETED.equals(fbillconfirmdetail[i].getRowstate())) {
                strExpenseID += fbillconfirmdetail[i].getFbcd_expense_id() + ";";
            }
        }
    }
    // 分割字符串為數組傳參
    String[] strExpenseIDs = strExpenseID.split(";");
    if (strExpenseIDs.length > 0) {
        return EpenseSigned.checkSelCode(strExpenseIDs);
    } else {
        return true;
    }
}

2. equals() 方法:內容比較標準

比較字符串內容而非引用。注意:調用者不能為 null,否則拋 NullPointerException。建議用 "constant".equals(variable) 模式避免空指針。

3. substring() 方法:子串提取

提取指定範圍子串,左閉右開 [begin, end)。常用於解析固定格式字符串(如日期、編碼)。

4. 綜合範例:split() 實戰演示

public static void splitString() {
    String strUser = "Zhangshan,Lisi,Wangma";
    String[] strsUser = strUser.split(",");
    for (int i = 0; i < strsUser.length; i++) {
        System.out.println(strsUser[i]);
    }
}
// 輸出:
// Zhangshan
// Lisi
// Wangma

二、Java String 核心注意事項(避坑指南)

1. 兩種創建方式的本質區別

  • String str = "";:字面量方式,指向字符串常量池中的對象(棧中引用,入池)。
  • String str = new String();:new 方式,在堆中創建新對象(不入池)。
  • 關鍵差異:== 比較引用地址,equals() 比較內容。字面量相同內容指向同一池對象,new 每次創建新對象。

2. String 數組初始化陷阱

  • String[] str 數組必須預定義長度,否則無法直接賦值 str[i] = "123"(報 NullPointerException)。
  • 正確初始化:String[] str = new String[5]; 或 String[] str = {"a","b"}; 直接指向已存在數組。

3. 比較操作的三大誤區

操作含義風險
strA.equals(strB)比較內容strA 不能為 null,否則 NPE
strA == strB比較引用地址(指針值)字面量可能相等,new 對象必不相等
strA.equals(strB)(文中筆誤重複)應為 strA == strB 比較對象值?實際上 == 比引用,equals 比內容

正確認知:== 比引用,equals() 比內容。字符串常量池機制導致字面量 == 可能為 true,但永遠不要用 == 比較字符串內容。

4. split() 方法進階用法

  • 分割正則中的特殊字符需轉義:split("\\.") 分割點號,split("\\|") 分割管道符。
  • 限制分割數量:split(",", 2) 最多分割成 2 段。
  • 尾部空串處理:"a,b,".split(",") 返回 ["a","b"](Java 8+ 默認丟棄尾部空串),split(",", -1) 保留空串 ["a","b",""]。

三、最佳實踐總結

  1. 優先用字面量 "" 創建字符串,利用常量池節省內存。
  2. 字符串拼接循環中用 StringBuilder/StringBuffer,避免大量臨時對象。
  3. 比較內容永遠用 equals(),且把常量放前面:"YES".equals(input)。
  4. 數組初始化必須指定長度或直接賦值。
  5. split 正則特殊字符轉義,注意尾部空串行為差異。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved