簡體   English   中英

Java Regex只用非中斷空格替換多個空格

[英]Java Regex that only replaces multiple whitepaces with Non-Breaking Spaces

我正在尋找一種用不間斷空格替換多個空格的Java正則表達方式。 應使用相同數量的非中斷空格替換兩個或多個空格,但不應替換單個空格。 這需要適用於任何數量的空白。 第一個字符可以是1個或更多個空格。

所以如果我的String開頭就像這樣:

TESTING THIS  OUT   WITH    DIFFERENT     CASES

我需要新的String看起來像這樣:

TESTING THIS  OUT   WITH    DIFFERENT     CASES

讓我們使用一些正則表達式(黑色?)魔法。

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
Pattern p = Pattern.compile(" (?= )|(?<= ) ");
Matcher m = p.matcher(testStr);
String res = m.replaceAll("&nbsp;");

該模式查找空格后跟另一個空格,或者查找另一個空格。 通過這種方式,它可以捕獲序列中的所有空白。 在我的機器上,使用java 1.6,我得到了預期的結果:

TESTING THIS&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;WITH&nbsp;&nbsp;&nbsp;&nbsp;DIFFERENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASES

編輯:這不處理標點符號,並重新處理它以處理標點符號將要求它使用與塞爾吉奧的答案相同的方法,但有兩個步驟而不是一個。 因此,這是一個不充分的答案,已被撤回。


原答案如下:

我能想到的最直接的方法是兩步法。

首先,用“&nbsp;”替換所有空格。 這非常快,因為它不一定是正則表達式。

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
String replaced = testStr.replace(" ", "&nbsp;");

接下來,替換“&nbsp;”的任何單個實例 有空格。

String replaced2 = replaced.replaceAll("\\b&nbsp;\\b", " ");
System.out.println(replaced2);

結果:

TESTING THIS&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;WITH&nbsp;&nbsp;&nbsp;&nbsp;DIFFERENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASES

你也可以一起跳過正則表達式。

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
String _replaced = testStr.replace("  ", "&nbsp;&nbsp;");
String replaced = _replaced.replace("&nbsp; ", "&nbsp;&nbsp;");

我沒有測試過這個,但是第一個找到了兩個空格的所有情況,並用不間斷的空格替換它們。 第二個發現存在奇數個空格並用兩個nbsps校正的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM