【问题标题】:Remove Whitespaces ONLY at the end of a String (java) [duplicate]仅在字符串末尾删除空格(java)[重复]
【发布时间】:2018-01-01 19:44:46
【问题描述】:

我已经找到了类似的主题,但它们并没有真正的帮助。

我基本上需要知道如何仅在字符串末尾删除空格。

例如: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+ 个空格的情况(可能)。

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

有什么建议吗?

【问题讨论】:

  • 使用a = a.replaceAll("\\s+$", "") 删除尾随空格并将结果存储回a

标签: java string indexing replace whitespace


【解决方案1】:

如果您的目标是仅剪切尾随空白字符并保存字符串的前导空白字符,您可以使用String class'replaceFirst() 方法:

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

\\s++ - 一个或多个空格字符(使用所有格量词(查看 Java API 文档中的 Pattern 类,您已在其中列出了正则表达式中使用的所有特殊字符)),

$ - 字符串结束

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

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

【讨论】:

  • @zlakad 感谢您的支持。正则表达式在程序员处理的各种情况下非常有用。花点时间流利使用它,这是值得的:-)
  • 谢谢,这一切都非常顺利,哈哈。删除了所有尾随空格,同时保留字符之间或开头的空格。正如我所愿。对于将来阅读此书并遇到类似问题的任何人,请查看此方法;)
  • 很高兴能帮到你!
【解决方案2】:

您可以使用正则表达式:

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();

【讨论】:

  • 您也可以只循环,减少“长度”变量,然后使用temp.setLength。甚至使用temp.substring(0, length);。不过,我怀疑会有很大的不同。
【解决方案3】:
a = ("X" + a).trim().substring(1);

【讨论】:

  • 所以,如果我的字符串是“something”,那么您在前面添加“X”。我的字符串变成“X something”? substring 变为“ something ”,并且 trim 删除了 LEADING 空格。这不是一个真正的答案
  • 1.试试看,它确实有效。 2. substring 在trim 之后执行。它只是删除了多余的“X”。
  • 它确实实现了 OP 想要的并且为此 +1,尽管在我看来,除非你第二次看它,否则代码在做什么并不明显。
  • @zlakad 它应该可以工作,因为 Jonathan 使用字符串 X 作为前导空格的保护,因此 trim 不会摆脱它,然后用 @ 删除 X 987654325@ 之前将其分配回a。
  • 它有效...对不起
【解决方案4】:
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;
    }
}

解决方案看起来像这样。

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2016-03-21
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    相关资源
    最近更新 更多