【问题标题】:Java deleting all occurrences of word in StringJava删除字符串中所有出现的单词
【发布时间】:2017-11-01 04:48:16
【问题描述】:

每次出现在字符串中时,我都会尝试删除“再见”这个词。它在第一次出现“Bye”时有效,但随后开始删除错误的字符。

String str = "HiByeHiByeByByeHiHiHi";
StringBuilder sb = new StringBuilder(str);
    for(int i=0; i<str.length()-2; i++){
        if(str.substring(i,i+3).equals("Bye")){
            sb.delete(i,i+3);
        }
    }
    System.out.println(sb.toString());
}

【问题讨论】:

  • 您正在更改字符串,因为它正在被 for 列表迭代,因此它的长度和字符的位置在您执行此操作时会发生变化。
  • 你最好这样做"HiByeHiByeByByeHiHiHi".replaceAll("Bye", "")
  • 哎呀:“你是”!
  • 建议:学习阅读Javadoc。略读Javadoc 以了解java.langjava.util 中的所有 类,并完整阅读看起来有用的类。这肯定包括String。如果你坚持使用 Java,你最终会读完所有这些,所以你可能会开始,你会发现 String.replaceAll()
  • @slim 感谢您的建议,

标签: java string replace substring


【解决方案1】:

不需要使用StrinBuilder,String#replace可以做到,只需使用方法replace

String str = "HiByeHiByeByByeHiHiHi";
str = str.replace("Bye", "");
System.out.println(str);

【讨论】:

    【解决方案2】:

    代码中的一些问题

    • str 还在使用,但它是一个不变量,应该用 sb 代替
    • 如果删除或ifwhile更改,我必须递减

      String str = "HiByeHiByeByByeHiHiHi";
      StringBuilder sb = new StringBuilder( str );
      for ( int i = 0 ; i < sb.length() - 2 ; i++ ) {
          while ( sb.substring( i, i + 3 ).equals( "Bye" ) ) {
              sb.delete( i, i + 3 );
          }
      }
      System.out.println( sb.toString() );
      

    【讨论】:

      【解决方案3】:

      您可以使用 replaceAll。

      String str = "HiByeHiByeByByeHiHiHi";
      System.out.println(str.replaceAll("Bye", "")); 
      

      它将打印:

      HiHiByHiHiHi

      【讨论】:

      • 为什么是正则表达式,你不需要正则表达式,只需简单的替换就可以了
      • @shanemcg 如果您对此答案感到满意,请接受并投票。
      【解决方案4】:

      为什么不使用String::replace方法,你可以一次性替换所有出现的:

      str.replace("Bye", "")
      

      所以你只需要这个:

      String str = "HiByeHiByeByByeHiHiHi";
      System.out.println(str.replace("Bye", ""));
      

      输出

      HiHiByHiHiHi
      

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 2016-02-02
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多