1. 程式人生 > >Java正則表示式替換移除空行和多餘的空格

Java正則表示式替換移除空行和多餘的空格

這幾天重拾Java寫程式碼,需要操作文字檔案中的內容。

最終,要把內容裡的空行和多餘的連續空格移除,使用String裡的replace或者replaceAll,試了很多次都沒有成功。

最後發現需要使用正則表示式Regex。先把解決方案共享如下。

1. 移除多餘的連續空格,只留下一個空格。

string.replaceAll("\\s{2,}", " ");

比較簡單\\s代表空格,使用貪婪表示式,如果是2個或多個空格,則替換為空格。

續,實踐中發現不工作原來\\s不光代表空格,是等於[ \t\n\x0B\f\r]

\\p{Blank}{2,} 則是A space or a tab

更簡單的 string.replaceAll("[ ]+", " ");

2. 移除空行

string.replaceAll("(?m)^\\s*$"+System.lineSeparator(), "");

?m開啟多行模式,^是行開始,\\s*代表任意個空格,$代表行結束,System.lineSeparator()則是為了跨平臺的換行符。

故所有空行包括只含有空格的空行都會被替換為空字串,即被移除。

考慮到不同平臺的檔案存在混用的情況,可以改進為 string..replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");

3. 替換字串中的唯一子字串,如果子字串含有正則表示式字元,則替換不成功。

可以考慮自己寫一個方法實現。

public String removeString(String str, String old) {
int i = str.indexOf(old);
if (i >= 0) {
return str.substring(0, i) + str.substring(i + old.length());
}
return str;
}

綜上, 希望可以幫到大家。