当前位置: 首页 > 知识库问答 >
问题:

如何使用Java删除字符串中的重复字符?[副本]

翁阳曜
2023-03-14

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

共有1个答案

辛麻雀
2023-03-14

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

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

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

 类似资料:
  • 问题内容: 我有像这样的字符串“ aaaabbbccccaaddddcfggghhhh”,我想删除重复的字符,得到像这样的字符串“ abcadcfgh”。 一个简单的实现是: 使用正则表达式是否可能有更好的实现? 问题答案: 你可以这样做: 正则表达式使用反向引用和捕获组。 正常的正则表达式是,但是您必须在Java中使用另一个反斜杠来使反斜杠转义。 如果您想要重复的字符数: 演示版

  • 我需要编写一个静态方法,该方法将作为参数,并返回一个新的。例如,如果我将“Maaaakkee”作为输入,它将返回“make”。我已经尝试了下面的代码,但它似乎没有显示最后一个字符。下面是我的代码:

  • 我需要对一个字符串进行预处理,并从中移除一些单词。我要找的东西是这样的:- 我是新的编程,所以请考虑。

  • 问题内容: 如何使用Java删除字符串中的重复空格(包括制表符,换行符,空格等)? 问题答案: 像这样: 例如 输出 那是什么意思 是一个正则表达式。匹配空格,制表符,换行符,回车符,换页或垂直制表符,并说“其中的一个或多个”。因此,以上代码将用一个空格字符折叠所有长于一个字符的“空白子字符串”。

  • 问题内容: 我正在制作一个基于Java中字符串处理的程序,其中需要从字符串数组中删除重复的字符串。在此程序中,所有字符串的大小均相同。 “数组”是一个字符串数组,其中包含许多字符串,其中两个字符串彼此相似。因此,使用下面的代码,必须删除重复的字符串,但是不能删除。 如何删除重复的字符串? 我正在使用以下代码。 问题答案: 这会工作 或者只使用a 而不是数组。

  • 我正在用Java制作一个基于字符串处理的程序,在这个程序中,我需要从字符串数组中删除重复的字符串。在这个程序中,所有字符串的大小都是相同的。 “数组”是一个字符串数组,包含许多字符串,其中两个字符串彼此相似。因此,使用下面的代码必须删除重复的字符串,但不会删除。 如何删除重复字符串? 我正在使用以下代码。