2014-06-24 99 views
2

在Java之後的空白,是什麼樣的一些標點符號後修復缺失的空白的最佳途徑:插入逗號,句號等標點符號

, . ; : ? ! 

例如:

String example = "This is!just an:example,of a string,that needs?to be fixed.by inserting:a whitespace;after punctuation marks."; 

輸出應該是:

"This is! just an: example, of a string, that needs? to be fixed. by inserting: a whitespace; after punctuation marks." 

很明顯,這是行不通的:

example = example.replaceAll("[,.!?;:]", " "); 

所以我正在尋找一個等待你的幫助的解決方案。 謝謝!

回答

3

您必須添加$0到您的替換表達式,你可以使用:

example = example.replaceAll("[,.!?;:]", "$0 "); 

將與內容加上一個空格替換您的匹配正則表達式。

順便說一句,如果你想確保你沒有多個空格,您可以這樣做:

example = example.replaceAll("[,.!?;:]", "$0 ").replaceAll("\\s+", " "); 

將轉變:

這只是一個:例如,一個字符串,需要修改。通過 插入:空格;標點符號後面。

要:

這是!只是一個例子,一個字符串,需要?等待修復。通過 插入:一個空格;標點符號後。

+0

有了這個解決方案,我的replaceAll後,除去可能的雙重空間。 – MariaH

+1

@MariaH我編輯了刪除可能的多個空格的答案。請記住,答案符合你的標準。如果你想嘗試一個不同的標準,我支持球員的答案 –

+1

修復後,我必須檢查雙withespaces無論如何。所以,對我而言,這是最好,最簡單的解決方案。謝謝!! – MariaH

6

您可以使用Positive Lookbehind and Negative Lookahead的組合。

example = example.replaceAll("(?<=[,.!?;:])(?!$)", " "); 

說明

的正回顧後發斷言在隨後的任何選擇標點符號的位置。使用Negative Lookahead表示,在此位置(字符串的末尾),以下內容不能匹配。

(?<=   # look behind to see if there is: 
    [,.!?;:]  # any character of: ',', '.', '!', '?', ';', ':' 
)    # end of look-behind 
(?!   # look ahead to see if there is not: 
    $   # before an optional \n, and the end of the string 
)    # end of look-behind 

Working Demo

0

您可以先行使用這一說法,避免增加額外的空間空的空間,並匹配所有的非字符之後他們添加空間。:

解決方案:

 String example = "This is!just an:example,of a string,that needs?to be fixed.by inserting:a whitespace;after punctuation marks."; 
    example = example.replaceAll("(?!\\s)\\W", "$0 "); 
    System.out.println(example); 

結果:

This is! just an: example, of a string, that needs? to be fixed. by inserting: a whitespace; after punctuation marks. 
+0

如果你不打算使用它們,你不需要羣體 –

+1

@Fede這是一個前瞻斷言,以防止空的空間被添加另一個空間。 –

+0

哎呀!對不起......有人需要眼鏡哈哈。謝謝 –