在 Java 開發中,String 是使用頻率最高的類之一。雖然我們每天都在用,但許多開發者僅停留在基本的拼接、截取層面。本文將系統梳理 String 的核心 API,涵蓋獲取、判斷、轉換、替換、分割、子串提取、大小寫轉換、去空格及比較等七大類常用操作,並附上完整可運行的示例代碼,助你徹底掌握字符串處理精髓。
int length()
返回字符串中字符的數量(即 Unicode 代碼單元數)。
char charAt(int index)
返回指定索引處的字符,索引從 0 開始。若索引越界拋出 StringIndexOutOfBoundsException。
int indexOf(int ch)
int indexOf(int ch, int fromIndex)
int indexOf(String str)
int indexOf(String str, int fromIndex)
返回首次出現的位置;未找到返回 -1。支持從指定位置開始搜索。
int lastIndexOf(String str)
從右向左查找,返回最後一次出現的位置,索引仍從左往右計數。
boolean contains(CharSequence s)
底層調用 indexOf,若返回值 != -1 則包含。也可直接用 indexOf(str) != -1 判斷。
boolean isEmpty()
等價於 length() == 0。
boolean startsWith(String prefix)
boolean endsWith(String suffix)
常用於文件類型校驗、路徑匹配等場景。
boolean equals(Object anObject)
boolean equalsIgnoreCase(String anotherString)
equals 區分大小寫,equalsIgnoreCase 忽略大小寫。切記不可用 == 比較字符串內容。
// 構造方法
String(char[] value)
String(char[] value, int offset, int count)
// 靜態方法
static String copyValueOf(char[] data)
static String copyValueOf(char[] data, int offset, int count)
static String valueOf(char[] data)
// 反向
char[] toCharArray()
String(byte[] bytes)
String(byte[] bytes, int offset, int length)
String(byte[] bytes, String charsetName) // 指定編碼
byte[] getBytes()
byte[] getBytes(String charsetName)
注意:字節與字符轉換時務必顯式指定編碼(如 UTF-8),避免跨平台亂碼。
static String valueOf(int i)
static String valueOf(double d)
// 等價於 i + "" 但語義更清晰
String replace(char oldChar, char newChar)
String replace(CharSequence target, CharSequence replacement)
替換所有匹配項,原字符串不變(不可變性),返回新字符串。
String[] split(String regex)
參數為正則表達式,特殊字符需轉義(如 split("\\."))。
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
包含頭不含尾 [begin, end)。索引越界拋出異常。
String toUpperCase()
String toLowerCase()
String trim()
僅移除首尾空白字符(\u0020 及以下),中間空格保留。
int compareTo(String anotherString)
按字典序比較,返回負數/0/正數。基於字符 Unicode 值差值。
public class StringMethodDemo {
// 轉換、去空格、比較
public static void methodConvertTrimCompare() {
String s = " hello Java ";
System.out.println("toUpperCase: " + s.toUpperCase()); // 大寫
System.out.println("toLowerCase: " + s.toLowerCase()); // 小寫
System.out.println("trim: '" + s.trim() + "'"); // 去首尾空格
String s1 = "abc", s2 = "aaa";
System.out.println("compareTo: " + s1.compareTo(s2)); // 1 (b-a)
}
// 子串
public static void methodSubstring() {
String s = "abcdef";
System.out.println("substring(2): " + s.substring(2)); // cdef
System.out.println("substring(2,4): " + s.substring(2,4)); // cd
}
// 分割
public static void methodSplit() {
String s = "zhangsan,lisi,wangwu";
for (String name : s.split(",")) {
System.out.println(name);
}
}
// 替換
public static void methodReplace() {
String s = "hello java";
String s1 = s.replace("java", "world");
System.out.println("原串: " + s); // hello java
System.out.println("新串: " + s1); // hello world
}
// 類型轉換
public static void methodTransform() {
char[] arr = {'a','b','c','d','e','f'};
String s = new String(arr, 1, 3); // bcd
System.out.println("char[]->String: " + s);
String s1 = "zxcvbnm";
char[] chs = s1.toCharArray();
for (char c : chs) System.out.println("ch=" + c);
}
// 判斷
public static void methodJudge() {
String str = "ArrayDemo.java";
System.out.println("startsWith Array: " + str.startsWith("Array"));
System.out.println("endsWith .java: " + str.endsWith(".java"));
System.out.println("contains Demo: " + str.contains("Demo"));
}
// 獲取
public static void methodGet() {
String str = "abcdeakpf";
System.out.println("length: " + str.length()); // 9
System.out.println("charAt(4): " + str.charAt(4)); // e
System.out.println("indexOf('a',3): " + str.indexOf('a',3)); // 5
System.out.println("lastIndexOf('a'): " + str.lastIndexOf("a")); // 5
}
public static void main(String[] args) {
methodConvertTrimCompare();
methodSubstring();
methodSplit();
methodReplace();
methodTransform();
methodJudge();
methodGet();
}
}
split、replaceAll 參數是正則,元字符需轉義。StringBuilder;單線程首選,多線程用 StringBuffer。掌握這些 API 並理解其底層原理,能讓你在日常開發中游刃有餘,避免常見坑點。建議收藏備查,實戰中多練習。