2011-03-29 41 views

回答

10

試試下面的最後空間,如果它僅僅是一個空格的事情

String txt = raw.replaceAll("\\s+", " ").trim(); 
+0

這樣我將刪除**全部**空格。相反,我需要他們中的一些保持原封不動:) – yegor256 2011-03-29 12:31:15

+0

對不起@ yegor256你是對的,修復它 – Yaneeve 2011-03-29 12:35:39

0

如果規範化意味着替換空格,製表符,換行符和換行符序列,那麼我會考慮使用一個簡單的正則表達式和String.split()來創建單獨的單詞,然後將它們附加到具有您想要的間距的StringBuilder中在之間。如果性能真的很重要,另一種方法是簡單地遍歷字符串的字符,查看每個字符並決定是將它追加到StringBuilder還是放棄它。

2

我看到你的字符串中有一個換行符,你想擺脫它。在這種情況下,我會建議使用正則表達式是這樣的...

Pattern.compile("\\s+").matcher(text).replaceAll(" ").trim(); 

可以送花兒給人存儲編譯後的正則表達式有更好的表現。

+0

在這種情況下,我仍然會有前導和尾隨空格。 – yegor256 2011-03-29 12:33:49

+0

對不起,修正了 – 2011-03-29 12:36:20

+0

在這種情況下,考慮使用便利的方法'String#replaceAll'。 – Thomas 2011-03-29 12:38:30

0
private static String normalize(String raw) { 
    StringBuilder sb = new StringBuilder(); 
    Scanner scanner = new Scanner(raw); 
    while (scanner.hasNext()) { 
     sb.append(scanner.next()); 
     sb.append(' '); 
    } 
    sb.deleteCharAt(sb.length() - 1); 
    return sb.toString(); 
}