我正在编写一个程序,使用以下程序删除String中的连续重复字符:
static void main(String[] args){
String s = "abcdeedcbfgf";
removeConsecutiveDuplicate(s);
}
static void removeConsecutiveDuplicate(String s) {
String tmp = "";
boolean isEligible = false;
for (int i = 0; i < s.length() - 1; i++) {
if (s.charAt(i) == s.charAt(i + 1)) {
tmp = s.substring(0, i) + s.substring((i + 2), s.length());
System.out.println(tmp);
s = tmp;
isEligible = true;
break;
}
}
System.out.println("s is:" + s);
while ( isEligible)
removeConsecutiveDuplicate(s);
}
输出应该是: afgf 当没有连续的字符时它应该停止,因为我在while中使用flag。但是国旗正在变得真正有价值。
我不知道它是怎么做到的?
有人可以帮我理解我做错了什么吗?
答案 0 :(得分:1)
while循环是while(true)。你永远不会做错。 一旦合格是真的,你就陷入了无限循环。 改变,如果。 while(iseligible)=&gt; if(iseligible)。
答案 1 :(得分:1)
修复方法是从您的方法返回新的String:
static String removeConsecutiveDuplicate(String s) {
// existing code, except...
return tmp;
}
然后在调用方法中,检查是否已更改:
String s = "abcdeedcbfgf";
while (true) {
String next = removeConsecutiveDuplicate(s);
if (next.equals(s))
break;
s = next;
}
完全删除isEligible
的变量和概念。
此外,您不需要为substring()
指定第二个参数,因为如果省略“to end of String”,则为:
s.substring(i, s.length())
与
相同s.substring(i);