Java String trim()

trim() 方法用來去除字串前後的空白字元。

語法

string.trim()
string.strip()       // Java 11+
string.stripLeading()  // Java 11+
string.stripTrailing() // Java 11+

trim() 範例

String s = "   Hello World   ";

String trimmed = s.trim();
System.out.println("[" + trimmed + "]");  // [Hello World]

// 只去除前後空白,中間的空白保留
String s2 = "  Hello   World  ";
System.out.println("[" + s2.trim() + "]");  // [Hello   World]

trim() 會移除的字元

trim() 會移除 ASCII 值小於等於 32 的字元:

String s = " \t\n Hello \r\n ";
System.out.println("[" + s.trim() + "]");  // [Hello]

包括:空白、Tab (\t)、換行 (\n)、回車 (\r) 等。

strip() (Java 11+)

strip() 功能類似 trim(),但支援 Unicode 空白字元:

// Unicode 不間斷空格 (U+00A0)
String s = "\u00A0Hello\u00A0";

System.out.println("[" + s.trim() + "]");   // [ Hello ](trim 無法移除)
System.out.println("[" + s.strip() + "]");  // [Hello](strip 可以)

建議在 Java 11+ 使用 strip() 取代 trim()

stripLeading() 和 stripTrailing()

只去除前面或後面的空白:

String s = "   Hello World   ";

// 只去除前面
System.out.println("[" + s.stripLeading() + "]");
// [Hello World   ]

// 只去除後面
System.out.println("[" + s.stripTrailing() + "]");
// [   Hello World]

實際應用

清理使用者輸入

Scanner scanner = new Scanner(System.in);

System.out.print("請輸入姓名:");
String name = scanner.nextLine().trim();

if (name.isEmpty()) {
    System.out.println("姓名不能為空");
}

處理檔案每行資料

String[] lines = {
    "  Alice  ",
    "  Bob  ",
    "  Charlie  "
};

for (String line : lines) {
    System.out.println(line.trim());
}
// Alice
// Bob
// Charlie

比較前先 trim

String input = "  yes  ";
String expected = "yes";

// 不 trim 會比較失敗
System.out.println(input.equals(expected));  // false

// trim 後比較
System.out.println(input.trim().equals(expected));  // true

移除所有空白

trim() 只移除前後空白,如果要移除所有空白:

String s = "  Hello   World  ";

// 移除所有空白
String noSpaces = s.replaceAll("\\s", "");
System.out.println(noSpaces);  // "HelloWorld"

// 壓縮多個空白為一個
String compressed = s.trim().replaceAll("\\s+", " ");
System.out.println(compressed);  // "Hello World"

isBlank() (Java 11+)

檢查字串是否為空白(只包含空白字元):

String s1 = "";
String s2 = "   ";
String s3 = "  \t\n  ";
String s4 = "Hello";

System.out.println(s1.isBlank());  // true
System.out.println(s2.isBlank());  // true
System.out.println(s3.isBlank());  // true
System.out.println(s4.isBlank());  // false

// isEmpty() vs isBlank()
System.out.println("".isEmpty());    // true
System.out.println("".isBlank());    // true
System.out.println("   ".isEmpty()); // false
System.out.println("   ".isBlank()); // true

indent() (Java 12+)

調整每行的縮排:

String s = "Line 1\nLine 2\nLine 3";

// 增加縮排
String indented = s.indent(4);
System.out.println(indented);
//     Line 1
//     Line 2
//     Line 3

// 減少縮排
String s2 = "    Hello\n    World";
String dedented = s2.indent(-2);
System.out.println(dedented);
//   Hello
//   World