【问题标题】:how to remove duplicate characters from a string using java? [duplicate]如何使用java从字符串中删除重复字符? [复制]
【发布时间】:2016-07-23 13:03:05
【问题描述】:

当我输入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);
    }
}

【问题讨论】:

  • 当我输入为“mama”时,它会打印“mamaa”......但我希望输出为“ma”。有什么问题是代码..帮帮我!!
  • 欢迎来到 SO。请阅读这篇关于如何提出一个好问题的文章,然后相应地格式化你的问题。这样,您将有更多机会获得有用的答案。 stackoverflow.com/help/how-to-ask
  • 请注意:不要在 cmets 中添加更多信息,而是更新您的问题。并且请:您希望我们提供帮助,您至少要花费 3 分钟来正确格式化您的问题!
  • @YuchenZhong CR 上的代码 postet 应该只是工作代码,根据 OP,此代码不能按预期工作,因此非常适合 SO

标签: java


【解决方案1】:

请给自己做一些纸笔测试,看起来应该像这样:

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 某个字符,如果没有则仅添加该字符。这会使内部循环完全多余。

【讨论】:

    【解决方案2】:

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

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

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

    1. 阅读您编写的代码并尝试在脑海中执行它,一次执行一条语句。你写的语句实际上会做你需要他们做的事吗?

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

    【讨论】:

    • 兄弟,我在 for 循环中将值 0 更改为 i .. 仍然与我提到的错误相同
    • 1) 我不是你的“兄弟”。 2) 我说“我可以看到 一些 错误”。 3)您是否按照我在其余答案中的建议完成了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2020-03-30
    相关资源
    最近更新 更多