如何使用java从字符串中删除重复字符?
当我以如何使用java从字符串中删除重复字符?,java,Java,当我以mama的形式输入时,下面的代码将打印mamaa,但我只希望输出为ma。代码有什么问题 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");
mama
的形式输入时,下面的代码将打印mamaa
,但我只希望输出为ma
。代码有什么问题
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);
}
}
import java.util.*;
第1类{
公共静态void main(字符串参数[]){
字符串str;
扫描仪s=新的扫描仪(System.in);
System.out.println(“输入字符串”);
str=s.nextLine();
字符串结果=”;
字符c=str.charAt(0);
结果=结果+c;
对于(inti=1;i我可以看到一些bug。但由于这显然是一个家庭作业或其他学习练习,您需要学会找到自己的bug。所以这里有一个提示
提示:您只测试与第一个字符重复的字符。(请再次阅读代码。)
最后,以下是调试您自己的代码的一些想法:
阅读你写的代码,试着在心里一次执行一条语句。你写的语句真的会做你需要它们做的事情吗
学习使用调试器,以及如何单步执行、设置断点和查看局部变量的值
请自己做一个笔试和纸试,应该是这样的:
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 |
和/或使用在所有Java编辑器(NetBeans、IntelliJ、Eclipse等)中都是标准的调试器,并逐步检查应用程序以了解出错的原因
基本上,如果当前处理的字符与结果字符串中的字符不匹配,则添加该字符。对于当前结果字符串中包含的每个不匹配字符,将在结果字符串末尾添加一个新字符d
相反,您应该仅在结果字符串中尚不可用时添加字符。这可以通过保留布尔标志found
(初始化为false)来完成在指示是否找到匹配项的外部循环中,以及在内部循环中,如果找到匹配项,则仅将此标志设置为true,并在内部循环上不断迭代,在内部循环完成后,检查found
标志,如果find等于false,则仅添加当前存储在d
中的字符
更直接的解决方案是检查当前结果字符串是否只是某个字符,如果不是,则只添加该字符。这将使内部循环完全冗余。当我输入“mama”时,它会打印“mamaa”。但我希望输出为“ma”。错误在于代码。。帮帮我!!欢迎来到SO。请阅读这篇文章,了解如何提出一个好问题,然后相应地格式化你的问题。这样你将有更多机会得到有用的答案。请注意:永远不要在评论中添加更多信息,而是更新你的问题。请:如果你想让我们帮助你,你至少要花3分钟正确格式化你的问题需要时间!应该在CR上发布到@YuchenZhong代码postet只应该是工作代码,根据OP,此代码未按预期工作,因此非常适合在SObro上发布。我已将for循环中的值0更改为i。仍然与我提到的错误相同1)我不是你的“兄弟”。2)我说“我能看到一些错误”。3)你已经按照我在其余答案中的建议做了吗?