如何使用java删除字符串中的重复字符?
当我给出的输入为mama
下面的代码打印mamaa
,但我只想输出为ma
。有什么问题是代码如何使用java删除字符串中的重复字符?
import java.util.*;
class Duplicate1 {
public static void main(String args[]) {
String str;
Scanner s=new Scanner(System.in);
System.out.println("enter the string");
str=s.nextLine();
String result="";
char c=str.charAt(0);
result=result+c;
for(int i=1; i<str.length(); i++) {
char d = str.charAt(i);
for(int j=0; j<i+1; j++) {
if(d != result.charAt(j)) {
result=result+d;
}
}
}
System.out.println(result);
}
}
我可以看到一些错误。但是,由于这显然是一项家庭作业或其他学习练习,因此您需要学习找出自己的错误。所以这里是一个提示。
提示:您只是测试与第一个字符重复的字符。 (再次阅读你的代码。)
最后,这里有上调试自己的代码的一些想法:
读你写的代码,并试图在同一时间精神上执行它,一个声明。你写的实际上是的陈述会做你需要他们做的事吗?
学习使用调试器,以及如何单步执行,设置断点并查看局部变量的值。
兄弟我已经将值0更改为我在for循环..仍然是我提到的相同的错误 –
1)我不是你的“兄弟”。 2)我说“我可以看到**一些**错误”。 3)你是否已经完成了我在其余答案中提出的建议? –
请让自己某种笔&纸测试看起来应该事端这样的:
init result = "m";
| i | j | d | c | comparison | result |
|---|---|---|---|------------|--------|
| 1 | 0 | a | m | a != m | ma |
| 1 | 1 | a | a | a != a | ma |
| 2 | 0 | m | m | m != m | ma |
| 2 | 1 | m | a | m != a | mam |
| 2 | 2 | m | m | m != m | mam |
| 3 | 0 | a | m | a != m | mama |
| 3 | 1 | a | a | a != a | mama |
| 3 | 2 | a | m | a != m | mamaa |
| 3 | 3 | a | a | a != a | mamaa |
和/或使用调试器,它是在的allmost任何Java编辑器(NetBeans的标准,的IntelliJ, Eclipse,...),并通过你的应用程序来了解为什么出现问题。
你基本上做的是添加当前处理的字符,如果它不匹配结果字符串中的字符。对于当前结果字符串中包含的每个不匹配字符,将在结果字符串的末尾添加一个新字符0。
相反,如果字符在结果字符串中尚不可用,应该只添加该字符。这可以通过在外部循环中保留布尔标志found
(用false初始化)来完成,该布尔标志指示是否找到匹配,并且在内部循环中,如果找到匹配,则仅将该标志设置为真,并继续迭代内部循环循环和内循环完成后,检查found
标志,并只添加当前存储在d
中的字符(如果发现等于false)。
更直接的解决方案是检查当前结果字符串是否只是contains某个字符,如果不是,则只添加字符。这会使内部循环完全冗余。
当我给“妈妈”输入它打印“mamaa”..但我想输出为“马”。代码有什么问题..帮助我! –
欢迎来到SO。请阅读这篇关于如何提出一个好问题的文章,然后相应地进行格式化。这样你将有更多的机会获得有用的答案。 http://stackoverflow.com/help/how-to-ask – lmazgon
请注意:不要在评论中放置更多信息,而是更新您的问题。而且请:你希望我们帮忙,你至少需要3分钟**才能正确**格式化你的问题! – GhostCat