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;
}
綜上, 希望可以幫到大家。