Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java从字符串中删除重复字符?_Java - Fatal编程技术网

如何使用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)你已经按照我在其余答案中的建议做了吗?