2013-08-16 38 views
2

我試圖刪除所有行的末尾的所有空格和製表符。刪除Java中每行結尾處的所有空格

我用下面的方法:

string.replace("\\s+$", ""); 

這裏, 「\ S + $」 是一個正則表達式

看來這是正確的。但事實是我不會刪除它。

的字符串是:

   a) AAAAAA.       
      b) BBBBB. 
      c) CCCCCC. 
      d) DDDDD. 
+1

你有沒有理由不能使用trim()? – chrylis

+1

請提供更多關於您爲什麼不使用trim()的更多信息 – SirRichie

+1

trim還會刪除開始位置。我不想那麼做 – liangwang

回答

4

像這樣:

string.replaceAll("\\s+$", ""); 
  • String#replace()並不需要一個正則表達式作爲參數。
  • 你需要加倍逃避\s

編輯:是它的工作:

public static void main(final String[] args) { 
    final String a = "  AAAAAAAA    "; 
    System.out.println(a.replaceAll("\\s+$", "")); 
} 

也許你的困惑是,你認爲a.replaceAll()將修改字符串a。 Java中的字符串是不可變的(它們不能改變)。 a.replaceAll()將返回修改後的字符串。

EDIT2:如果您使用多行字符串,"\\s+[$\n]"正則表達式應該做的工作。

+0

仍然不起作用 – liangwang

+0

@liangwang是的,它確實有效。我添加了一個簡單的例子。 – m0skit0

+0

我認爲這不適用於多行字符串。試着用final String a =「AAAAA \ n BBBB \ n」運行它;看看。波希米亞人的工作。 – JeroenWarmerdam

3

使用replaceAll(),它使用正則表達式來找到它的目標,而不是replace(),它使用純文本作爲其目標。

str = str.replaceAll("(?m)\\s+$", ""); 

在這裏,我已經添加了(?m)開關,使克拉和美元賽前/換行,你需要使它的工作給出的多行輸入後。

+1

+1來解釋爲什麼(?m)有所不同。 – JeroenWarmerdam

+1

標誌+1我不知道 – m0skit0

-1
Delete all the space at end of each line in Java 

我猜你需要String#trim()方法

使用

string.trim() 

返回字符串的一個副本,其中前後空白省略。

+1

修剪會在開始和結束時刪除空格。 – anubhava

+0

是的,我看到第一個例子,aaaa'也沒有正確對齊。我猜OP需要它。 –