如何使用java从字符串中删除重复的字符?

时间:2016-07-23 13:03:05

标签: 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");

        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);
    }
}

2 个答案:

答案 0 :(得分:1)

请自己做一些笔&amp;纸张测试应该看起来像这样:

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标志,如果发现等于false,则仅添加当前存储在d中的字符。

更直接的解决方案是检查当前结果字符串是否只是contains某个字符,如果不是则只添加字符。这会使内循环完全冗余。

答案 1 :(得分:0)

我可以看到一些错误。但由于这显然是一项家庭作业或其他学习练习,你需要学会找到自己的错误。所以这是一个提示。

提示:您只测试与第一个字符重复的字符。 (再次阅读你的代码。)

最后,这里有一些关于调试自己的代码的想法:

  1. 阅读您编写的代码并尝试精神上执行它,一次一个声明。你写的实际的陈述是否会做你需要他们做的事情?

  2. 学习使用调试器,以及如何单步,设置断点并查看局部变量的值。