在java中删除字符串末尾的空格
可能重复:在java中删除字符串末尾的空格,java,string,spaces,Java,String,Spaces,可能重复: 当我将数据导入应用程序时,我需要去掉某些字符串末尾的空格,而不是开头的空格,因此我不能使用trim()。。。我已经建立了一种方法: public static String quitarEspaciosFinal(String cadena) { String[] trozos = cadena.split(" "); String ultimoTrozo = trozos[trozos.length-1]; return cadena.substring(
当我将数据导入应用程序时,我需要去掉某些字符串末尾的空格,而不是开头的空格,因此我不能使用trim()。。。我已经建立了一种方法:
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);
}
卡德娜是我要转换的弦
因此,如果cadena=“1234”,此方法将返回“1234”
我想知道有没有更有效的方法 您可以对字符串使用
replaceAll()
方法,并使用regex\s+$
:
return cadena.replaceAll("\\s+$", "");
如果您只想删除实空格(不是表格或新行),请用正则表达式中的空格替换\\s
。有适当的方法。我会这样做:
public static String replaceAtTheEnd(String input){
input = input.replaceAll("\\s+$", "");
return input;
}
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);
}
这比使用正则表达式要详细得多,但效率可能更高。字符串是一个单词,还是一个句子?@oopsi:实际上没关系^^我不会使用*但是+。无法替换0个空格;)
replaceFirst
在这里也可以使用。@MarkoTopolnik:replaceFirst()?OP想要的是replaceLast()。@m0skit0该正则表达式显然只能有一个匹配项replaceLast
甚至不是String
的方法。我知道它不存在,这是个笑话。无论如何,关键是replaceFirst()
在这里没有用。@m0skit0:)它是first+,然后我编辑为*,不知道为什么:)。thx Though我可以知道投票失败的原因吗?我不太确定效率(regex可能是用本机代码编码的)。实际上,重新发明轮子是没有用的。为什么要手动编写库已经可以执行的代码?只有当可用的东西不适合你(或太慢)时,你才能重新发明轮子。以后再优化;)实际上,我删除了否决票:显然,确保效率的唯一方法是针对有意义的数据集进行测试。也就是说,regexp可能会为其通用性付出代价:例如,regexp引擎通常会转换输入表达式以提高效率,这是我的版本不必执行的步骤。至于外部库,我倾向于同意您的观点,但这仍然是在维护一小段代码和跟踪另一个依赖关系之间的权衡。为什么,有时候自己编写和调试代码比寻找现成的解决方案花费更少的时间!但是你会浪费时间来编写和测试它。我的观点是,如果不需要的话,你不必重新发明轮子。第二个链接不再工作了
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);
}