2017-05-31 34 views
0

我试图在每次出现字符串时删除“再见”一词。它第一次工作“再见”出现,但随后开始删除错误的字符。删除字符串中出现的所有字的Java

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()); 
} 
+2

你改变字符串改变因为它正在被一个列表迭代,所以它的长度和字符位置会随着你的变化而变化。 –

+1

你最好这样做''HiByeHiByeByByeHiHiHi“.replaceAll(”Bye“,”“)' – john

+0

OOPS:”你是“! –

回答

1

无需使用StrinBuilder,String#replace能做到这一点,只是使用的方法replace

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

为什么你不使用String::replace方法,你可以一次性全部更换发生:

str.replace("Bye", "") 

,所以你只需要这样:

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

输出

HiHiByHiHiHi 
1

您可以使用replaceAll。

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

它会打印:

HiHiByHiHiHi

+1

为什么正则表达式,你没有需要一个正则表达式,只需一个简单的替换就可以做到这一点 –

+0

@shanemcg如果你对这个答案感到满意,那么请接受它,并加注它。 –

0

的一些问题在代码

  • STR仍在使用,但它是一个不变的,应该不是某人
  • 我必须在删除情况下或if递减由while

    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()); 
    
相关问题