【问题标题】:Delete duplicate chars from a string [duplicate]从字符串中删除重复的字符[重复]
【发布时间】:2020-03-30 03:55:27
【问题描述】:

我要求编写一个程序来删除字符串中的重复字母 **注意:大写和小写字母被认为是重复的。 我编写了代码,它适用于所有没有空格的输入,当一个字符串带有空格时,它会显示错误。 我必须只使用循环和数组,没有额外的函数或哈希, 这是我几乎可以工作的代码:

case 2:
    System.out.println("Give the string input");
    String original=reader.next();
    char[] charts=original.toCharArray();
    int length=charts.length;
    for (int i=0; i<length; i++){
        for (int j=i+1; j<length; j++){
            if(charts[i]==charts[j]||charts[i]+32==charts[j] ||charts[i]-32==charts[j]){
                int temp=j; //duplicate element index
                for (int k=temp; k<length-1; k++){ //delete shifting elements to left.
                    charts[k]=charts[k+1];
                }//inner inner for
                j--;
                length--; // reduce char array length because we removed a character
            }//if

        }//inner for

    }//for
    String CleanString= new String(charts); //new string without repeated chars
    CleanString=CleanString.substring(0,length); //set its length 
    System.out.println("New str = "+CleanString);
    break;

【问题讨论】:

  • 你能提供任何它失败的具体输入吗?
  • 问题是您使用的是next() 而不是nextLine(),它只读取一个令牌。一个标记基本上是文本,直到一个空格,所以一个单词。要阅读完整的输入,请使用nextLine()。
  • "当一个字符串带有空格时,它会显示错误。" - 什么错误?
  • if(charts[i]==charts[j]||charts[i]+32==charts[j] ||charts[i]-32==charts[j]) - 这会将某些标点符号视为与某些小写字母“相同”。请改用Character.toLowerCase(a) == Character.toLowerCase(b) || Character.toUpperCase(a) == Character.toUpperCase(b)。
  • 您可以为自己节省一行:String cleanString = new String(charts, 0, length);。

标签: java string duplicates


【解决方案1】:

我建议你使用 Scanner 的方法nextLine() 来读取带有空格的字符串并用你的算法处理它

 Scanner scanner = new Scanner(System.in);
 String original = scanner.nextLine();

顺便说一句,如果你不能使用正则表达式,你可能想要使用基于计数排序的方法。创建一个大小等于 char 的最大大小的数组。当遇到字符值'X' 时,遍历字符串并增加索引为X 的数组元素。将X 添加到您的字符数组中。当你遇到array[X] &gt;= 1 时,不要在数组中添加 X。

【讨论】:

  • 他在上面已经明确声明 reader 是扫描仪。否则他无法接受输入。
  • @AbdulAlimShakir 我编辑了我的答案以获得许可
  • 我将扫描仪声明为:静态扫描仪阅读器=新扫描仪(System.in);我像你说的那样再次声明并且代码有效,非常感谢我的朋友
  • @WardJub 是的,我知道。我只是决定让其他读者明白:) 希望它有所帮助
【解决方案2】:

您的代码可以正常工作。只需在第三行使用此代码:

String original="";
original+=reader.nextLine();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多