2012-08-24 188 views
7

可能重複:
Strip Leading and Trailing Spaces From Java String去掉空格

當我導入數據到應用程序,我需要在年底擺脫空間某些字符串而不是那些一開始,所以我不能用修剪()...我已經成立了一個方法:

public static String quitarEspaciosFinal(String cadena) { 
    String[] trozos = cadena.split(" "); 
    String ultimoTrozo = trozos[trozos.length-1]; 
    return cadena.substring(0,cadena.lastIndexOf(ultimoTrozo.charAt(ultimoTrozo.length()-1))+1); 
    } 

,其中卡德納是我改造串...

所以,如果卡德納=「1234」這個方法將返回「1234」 ......

我想知道如果有一個更有效辦法做到這一點...

+0

字符串只是一個單詞,還是可以是一個句子? – oopsi

+0

@oopsi:其實並不重要^^ – m0skit0

回答

21

您可以在字符串中使用replaceAll()方法,用正則表達式\s+$

return cadena.replaceAll("\\s+$", ""); 

如果你只是想去掉實際空間(未統計表也不新的生產線),更換\\s在重新空間GEX。

+3

我不會使用*但+。無用替換0空格;) – m0skit0

+0

'replaceFirst'也可以用於此處。 –

+0

不客氣! – kgautron

6
public static String replaceAtTheEnd(String input){ 
    input = input.replaceAll("\\s+$", ""); 
    return input; 
} 
+2

我不會使用*但+。無用取代0空格;) – m0skit0

+1

@ m0skit0 :)它是第一個+,然後我編輯爲*,不知道爲什麼:)。 thx雖然 – Eugene

8
String s = " this has spaces at the beginning and at the end  "; 
    String result = s.replaceAll("\\s+$", ""); 
4

我會做這樣的:

public static String trimEnd(String s) 
{ 
    if (s == null || s.length() == 0) 
     return s; 
    int i = s.length(); 
    while (i > 0 && Character.isWhitespace(s.charAt(i - 1))) 
     i--; 
    if (i == s.length()) 
     return s; 
    else 
     return s.substring(0, i); 
} 

這比使用正則表達式的方式更詳細的,但它可能是更有效的。

+0

我可以知道downvote的原因嗎? –

+0

我不會那麼肯定效率的東西(正則表達式可能用本機代碼編碼)。事實上,重新發明車輪毫無用處。爲什麼要手動編寫一些你已經可以通過庫來做的事情?只有當可用的東西不適合你時(或者太慢),你才能重新發明輪子。以後優化;)我實際上刪除了downvote:P – m0skit0

+0

很顯然,確保效率的唯一方法就是測試一個有意義的數據集。也就是說,正則表達式可能會爲其一般性付出代價:例如正則表達式引擎通常會翻譯輸入表達式以提高效率,這是我版本不必執行的步驟。至於外部庫,我傾向於同意你的看法,但在維護一小段代碼和追蹤另一個依賴關係之間仍然是一種折衷。爲什麼,有時只需要更少的代碼和調試,而不是尋找現成的解決方案! –