2012-08-24 152 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

很显然,确保效率的唯一方法就是测试一个有意义的数据集。也就是说,正则表达式可能会为其一般性付出代价:例如正则表达式引擎通常会翻译输入表达式以提高效率,这是我版本不必执行的步骤。至于外部库,我倾向于同意你的看法,但在维护一小段代码和追踪另一个依赖关系之间仍然是一种折衷。为什么,有时只需要更少的代码和调试,而不是寻找现成的解决方案! –