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

Java String 核心方法大全:獲取、判斷、轉換、替換、切割、子串、比較實戰指南

     編輯:Java 程式設計入門

String 不可變性核心觀念

Java 中 String 為 不可變物件。所有「修改」操作實際上都會返回新的 String 物件,原物件不變。這是理解所有 String 方法行為的基礎。

一、獲取資訊類方法

方法說明範例
int length()返回字元數(UTF-16 代碼單元數)"Hello".length() == 5
char charAt(int index)返回指定索引字元"ABC".charAt(1) == 'B'
int indexOf(int ch)首次出現位置,無則 -1"ABAB".indexOf('A') == 0
int indexOf(String str)子字串首次出現位置"ABC".indexOf("BC") == 1
int indexOf(String str, int fromIndex)從指定位置開始搜尋"ABAB".indexOf("A", 1) == 2
int lastIndexOf(String str)反向搜尋最後出現位置"ABAB".lastIndexOf("A") == 2

二、判斷類方法

方法說明注意事項
boolean contains(CharSequence s)是否包含指定子序列等同 indexOf(s) >= 0
boolean isEmpty()長度是否為 0Java 6+,推薦用此替代 length() == 0
boolean isBlank()是否為空或僅含空白字元Java 11+,含空格、製表、換行等
boolean startsWith(String prefix)是否以指定前綴開頭可用於檔案類型判斷
boolean endsWith(String suffix)是否以指定後綴結尾filename.endsWith(".java")
boolean equals(Object obj)內容相等(區分大小寫)覆寫 Object.equals,**絕不用 == 比較內容**
boolean equalsIgnoreCase(String str)忽略大小寫比較效能略低於 equals

三、轉換類方法

字元陣列 ⇄ String

// 字元陣列 → String
char[] chars = {'J', 'a', 'v', 'a'};
String s1 = new String(chars);                    // "Java"
String s2 = new String(chars, 1, 2);              // "av" (offset=1, count=2)
String s3 = String.valueOf(chars);                // 靜態方法,等同 new String(chars)
String s4 = String.copyValueOf(chars, 1, 2);      // 同 valueOf

// String → 字元陣列
char[] arr = "Java".toCharArray();                // ['J','a','v','a']

位元組陣列 ⇄ String(編碼關鍵)

String str = "中文";

// String → byte[](必須指定編碼!)
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);  // 推薦明確指定

// byte[] → String(必須指定編碼!)
String restored = new String(bytes, StandardCharsets.UTF_8);

警告:不指定編碼將使用平台預設編碼,導致跨平台亂碼。生產環境強制指定 StandardCharsets.UTF_8。

基本型別 → String

String s1 = String.valueOf(123);      // "123"
String s2 = String.valueOf(45.67);    // "45.67"
String s3 = String.valueOf(true);     // "true"
// 等同於:123 + ""、String.valueOf() 效能略優

四、替換方法

String s = "hello java";
// 字元替換
s.replace('a', 'o');          // "hello jovo"
// 字串替換(全部替換)
s.replace("java", "world");   // "hello world"
// 正則替換
s.replaceAll("\\s+", "-");    // "hello-java"
s.replaceFirst("\\d+", "#");  // 僅替換首個匹配

五、切割方法

String csv = "張三,李四,王五";
// 簡單切割
String[] arr1 = csv.split(",");          // ["張三", "李四", "王五"]
// 正則切割(限制結果長度)
String[] arr2 = csv.split(",", 2);       // ["張三", "李四,王五"]
// 移除尾部空字串
String trailing = "a,b,c,,,";
trailing.split(",");        // ["a", "b", "c"] 尾部空字串被丟棄
trailing.split(",", -1);    // ["a", "b", "c", "", "", ""] 保留

六、子串擷取

String s = "abcdef";
// 從索引 2 到結尾
s.substring(2);        // "cdef"
// 索引 2 到 4(不含 4)
s.substring(2, 4);     // "cd"
// 注意:substring 共用底層 char[](Java 7u6 前),大字串切割可能記憶體洩漏
// 避免:new String(s.substring(2,4)) 強制複製

七、大小寫、去空格、比較

方法說明範例
toUpperCase()轉大寫"java".toUpperCase() == "JAVA"
toLowerCase()轉小寫"JAVA".toLowerCase() == "java"
trim()移除首尾空白字元(≤ U+0020)" hi ".trim() == "hi"
strip()移除首尾 Unicode 空白字元Java 11+,比 trim 更完整
compareTo(String s)字典序比較返回負/0/正,可用於排序
compareToIgnoreCase(String s)忽略大小寫比較

實戰綜合範例

public class StringDemo {
    public static void main(String[] args) {
        String raw = "  User:Admin, Role:SuperAdmin, Status:Active  ";
        
        // 1. 清理
        String cleaned = raw.strip();
        
        // 2. 解析
        String[] parts = cleaned.split(", ");
        Map map = new LinkedHashMap<>();
        for (String part : parts) {
            String[] kv = part.split(":");
            if (kv.length == 2) map.put(kv[0], kv[1]);
        }
        
        // 3. 判斷權限
        boolean isAdmin = "Admin".equalsIgnoreCase(map.get("User"));
        boolean isActive = "Active".equals(map.get("Status"));
        
        // 4. 格式化輸出
        String output = String.format("用戶: %s | 角色: %s | 狀態: %s | 權限: %s",
            map.get("User"), map.get("Role"), map.get("Status"), 
            isAdmin && isActive ? "完整" : "受限");
        
        System.out.println(output);
    }
}

效能提醒

  • 頻繁拼接:使用 StringBuilder(單執行緒)或 StringBuffer(多執行緒)
  • 大量切割/替換:考慮正則預編譯 Pattern.compile()
  • 大字串 substring:Java 7u6+ 已修復記憶體洩漏,但仍建議 new String(sub) 斷開引用

總結

掌握 String 核心 API,關鍵在於理解不可變性、編碼轉換、正則與普通方法的區別。實務中善用 strip()、isBlank()(Java 11+)、String.format() 等現代 API,能寫出更健壯、更易讀的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved