[英]Regex (Java): How do I replace “||” with “| |” repeatedly
如果我有一串管道分隔的數據:
123456|abcd|||65464|hgfhgf
如何替換||
任何出現 與: | |
| |
?
所以最終看起來像這樣:
123456|abcd| | |65464|hgfhgf
我嘗試使用簡單的Java表達式:
delimString.replaceAll("\\\|\\\|", "| |");
但這只取代了第一次出現:
123456|abcd| ||65464|hgfhgf
所以我需要一些東西讓它重復(我認為貪婪)。
String resultString = subjectString.replaceAll("\\|(?=\\|)", "| ");
正則表達式解釋沒有Java的雙反斜杠:
\| # Match a literal |
(?= # only if it's followed by
\| # another literal |.
) # End of lookahead assertion
你甚至可以狂野地用空格字符替換兩個管道之間的空白區域 :
String resultString = subjectString.replaceAll("(?<=\\|)(?=\\|)", " ");
問題在於匹配位置已超過第二個| 你換了,所以不算數。 你必須使用while循環才能做到這一點。
我同意Ingo - 循環解決方案是更多的代碼行,但更容易理解(至少它不必解釋;)):
String test = "abc|def||ghi|||jkl";
StringBuilder result = new StringBuilder();
char previous = 0;
for (char c:test.toCharArray()) {
if (c == '|' && previous == '|')
result.append(" ");
result.append(c);
previous = c;
}
System.out.println(result);
在我犯錯誤之前對我的回答感到抱歉。 我剛剛更新了。
這是另一種可以100%肯定的工作方式:
public static void main(String [] args) {
String data = "123456|abcd|||65464|hgfhgf";
String modified = "";
for(int i = 0; i < data.length();i++) {
if(data.charAt(i) == '|') {
modified += "| |";
}
else {
modified += "" + data.charAt(i);
}
}
System.out.print(modified);
}
最后它看起來像這樣:
123456 | | ABCD | || || | 65464 | | hgfhgf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.