仅移除字符串末尾的空格(Java)

4
我已经找到了类似的主题,但它们并没有真正帮助到我。
我基本上想知道如何仅在字符串末尾删除空格。
例如:String a = "Good Morning it is a nice day "; 应该是:String a = "Good Morning it is a nice day"; 你可以看到末尾有三个空格或者其他字符。我得到了replaceAll()的建议,但是我只想删除末尾剩余的空格。我该怎么做?我已经尝试过不同的方法,比如这样遍历字符串:
for(int i = a.length(); i > a.length() - 3; i++){
     if(a.charAt(i) == ' '){
           <insert Solution here>
     }
}

通过上面的代码,我想检查字符串的最后三个字符,因为这已经足够了。它足够满足我想做的事情。不会出现在字符串末尾有99+个空格的情况(可能)。

但是正如你所看到的,我仍然不知道该使用哪种方法或者这是否是正确的方法。

有什么建议吗?


3
使用a = a.replaceAll("\\s+$", "")来去除末尾的空格,并将结果存回到a中。 - Ousmane D.
4个回答

6

您可以使用正则表达式:

a = a.replaceAll("\\s+$", "");

去除末尾空格并将结果存回 a 中。

或者使用 for 循环:

String a = "Good Morning it is a nice day    ";
StringBuilder temp = new StringBuilder(a);
for( int i = temp.length() - 1 ; i >= 0; i--){
     if(temp.charAt(i) == ' '){
          temp.deleteCharAt(i);
     }else{
          break;
     }
}

a = temp.toString();

1
你也可以选择使用循环,递减一个“长度”变量,然后使用 temp.setLength。或者甚至使用 temp.substring(0, length);。虽然不太可能有太大的区别。 - Andy Turner

6

如果你的目标是仅去除字符串尾部的空白字符并保留字符串头部的空白字符,你可以使用String类的replaceFirst()方法:

String yourString = "   my text. ";
String cutTrailingWhiteSpaceCharacters = yourString.replaceFirst("\\s++$", "");

\\s++ - 表示一个或多个空格字符(使用贪婪量词,请参考Java API文档中的Pattern类,其中列出了正则表达式中使用的所有特殊字符)。

$ - 字符串结束位置。

您可能还想查看我在编辑之前的回答的一部分:

如果您不关心输入字符串中的前导空格字符:String类提供了一个trim()方法。对于您的情况,它可能是一个快速解决方案,因为它会裁剪给定字符串的前导和尾随空格。


@zlakad 感谢您的点赞。正则表达式在程序员处理的各种情况下都非常有用。花些时间熟练使用它,这是值得的 :-) - Przemysław Moskal
谢谢,这个运行得非常顺利哈哈。删除了所有尾随的空格,同时保留了字符之间或开头的空格。正如我所希望的那样。对于将来遇到类似问题的任何人,请尝试使用这种方法;) - J.Doe
我很高兴能够帮助你! - Przemysław Moskal

4
a = ("X" + a).trim().substring(1);

所以,如果我的字符串是“ something ”,你在前面添加“X”。我的字符串变成了“X something ”?子字符串变成“ something ”,并且修剪删除前导空格。这不是一个真正的答案。 - zlakad
1
  1. 试一下,它确实有效。
  2. 在修剪之后执行子字符串。它只是删除多余的 "X"。
- Jonathan Rosenne
1
它确实实现了OP想要的功能,因此+1,尽管在我看来,除非你第二次或更多次查看代码,否则它对眼睛不是很明显。 - Ousmane D.
2
@zlakad,它应该能够正常工作,因为Jonathan使用字符串“X”作为前导空格的保护符,以便trim不会将其去除,然后在将其重新分配给a之前使用substring删除“X”。 - Ousmane D.
1
它可以运行...抱歉。 - zlakad

0
int counter = 0;
String newWord = "";
for(int i = 0; i < word.length(); i++){
    if (word.charAt(i) == " "){
        counter++;
    }
    else {
        counter = 0;
    }

    if (counter > 1){
        newWord = word.substring(0, i);
        break;
    }
    else {
        newWord = word;
    }
}

解决方案可能看起来像这样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接