Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中删除字符串末尾的空格_Java_String_Spaces - Fatal编程技术网

在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);
}