我试图从字符串中删除重复的字符。例如,如果我输入字符串abaqueru
,则应该为bqer
提供重复的字符a
和u
。但是,结果是不必要的循环。这是代码:
public class question {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String s = "abaqueru";
calculate(s);
// TODO code application logic here
}
public static void calculate(String s){
String result;
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
char temp;
temp=c;
for(int j = 1; j < s.length(); j++)
{
char x = s.charAt(j);
if(temp==x){
s=s.replaceAll(""+temp,"");
calculate(s);
}
}
System.out.println(s);
}
}
答案 0 :(得分:7)
String
在java中是不可变的。在replaceall之后,您需要将其分配回来
s=s.replaceAll(""+temp,"");
如果您没有将其分配回去,那么循环将永远继续。
解决了stackoverflow错误,我没有专注于你的实际逻辑:)
答案 1 :(得分:2)
我将使用Suresh Atta的答案导致堆栈溢出错误。 我也检查了你的逻辑。做了一些必要的改变
public class Question {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String s = "abaqueru";
calculate(s);
// TODO code application logic here
}
public static void calculate(String s){
String result;
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
char temp;
temp=c;
for(int j = i+1; j < s.length(); j++)
{
char x = s.charAt(j);
if(temp==x){
s=s.replaceAll(""+temp, "");
break;
// calculate(s);
}
}
}
System.out.println(s);
}
}
然而,这可以进一步定制,以在空间和时间方面实现性能。事实上,可以使用更简单的逻辑:)
答案 2 :(得分:1)
绝对适合Suresh Atta的回答!但是,我想我会帮助您浏览一下代码,以帮助您找到一些错误。
我只是浏览了代码中的逻辑,但肯定有一些值得一看的东西。最值得注意的是,j
从未在内循环中使用。实际上,如果您使用的是IDE,则应警告您j
从未使用过。
更新:另外,请考虑使用String.valueOf(char c)
代替s=s.replaceAll(""+temp,"");
打电话给你if(temp==x)
条件。也就是说,我认为你可以将角色转换为String?然后你可以使用String.append(),你可以在我发给你的链接上阅读它!