![](/img/trans.png)
[英]How do I make this Java code operate properly? [Multi-threaded, race condition]
[英]How do I make multi replace() java
我有一個字符串,其中包含\\r\\n
, \\r
\\n
, \\n
或\\"
字符。如何更快地替換它們?
我已經擁有的是:
String s = "Kerner\\r\\n kyky\\r hihi\\n \\\"";
System.out.println(s.replace("\\r\\n", "\n").replace("\\r", "").replace("\\n", "").replace("\\", ""));
但我的代碼看起來不夠漂亮。 我在互聯網上找到了類似的東西:
replace("\\r\\n|\\r|\\n|\\", "")
我嘗試過,但它沒有用。
您可以將其包裝在方法中,將/r/n
, /n
和/r
放在列表中。 迭代列表並替換所有這些字符並返回修改后的字符串。
public String replaceMultipleSubstrings(String original, List<String> mylist){
String tmp = original;
for(String str: mylist){
tmp = tmp.replace(str, "");
}
return tmp;
}
測試:
mylist.add("\\r");
mylist.add("\\r\\n");
mylist.add("\\n");
mylist.add("\\"); // add back slash
System.out.println("original:" + s);
String x = new Main().replaceMultipleSubstrings(s, mylist);
System.out.println("modified:" + x);
輸出:
original:Kerner\r\n kyky\r hihi\n \"
modified:Kerner kyky hihi "
我不知道你當前的替換邏輯是否正確,但它現在說, \\n
, \\r
或\\r\\n
被替換為空字符串,反斜杠也被替換為空字符串。 如果是這樣,那么你可以嘗試以下正則表達式替換所有:
String s = "Kerner\\r\\n kyky\\r hihi\\n \\\"";
System.out.println(s.replaceAll("\\r|\\n|\\r\\n|\\\\", ""));
我看到你嘗試的一個問題是你正在調用replace()
,而不是replaceAll()
,所以它只會做一次替換然后停止。
可以使用String.replaceAll()
,在您的問題中,您嘗試使用String.replace()
,它不解釋正則表達式,只使用普通替換字符串...
你還需要再次轉義\\\\,即\\\\\\\\
而不是\\\\
String s = "Kerner\\r\\n kyky\\r hihi\\n \\\"";
System.out.println(s.replaceAll("\\\\r|\\\\n|\\\\\"", ""));
產量
Kerner kyky hihi
注意String.replaceAll()和String.replace()之間的區別
將給定替換的給定正則 表達式匹配的此字符串的每個子字符串替換。
將與該文字目標序列匹配的此字符串的每個子字符串替換為指定的文字替換序列 。
如果要一次性完成所有替換,請使用正則表達式。 http://www.javamex.com/tutorials/regular_expressions/search_replace.shtml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.