【问题标题】:Finding duplicated or repeated character in a string and return the number of repeation in Java在字符串中查找重复或重复的字符并返回 Java 中的重复次数
【发布时间】:2016-03-11 21:48:48
【问题描述】:

我创建了一个 Java 程序来查找字符串中的重复字符并告诉该字符重复了多少次。

我创建了两个具有相同字符的数组,以及两个将第一个数组的第一个元素与第二个数组中的所有字符进行比较的 for 循环,对于第二个元素, 这是我的代码:

Scanner console=new Scanner(System.in);
char[] array=console.next().toCharArray();
char[] array2=array;
int count=0;
char m;
for (int i=0; i<array.length; i++) {
    for (int j=0; j<array2.length; j++) {
        if (array[i]==array2[j]) {
            count=count+1;
        } // end if
    } //end loop inner
    if ( count>=2) {
        System.out.println(array[i]+" is duplicated "+count+" times!");
    } // end 2nd if
    count=0;
} //end outer loop

我的输出示例是: aabb

a is duplicated 2 times!
a is duplicated 2 times!
b is duplicated 2 times!
b is duplicated 2 times!

如您所见,我的问题是,如果一个字符重复两次,它会打印两行,说明它重复了两次,我知道这背后的原因,但我不知道如何解决它!。我不想使用 hashmap,因为到目前为止我只研究过 if/else、循环以及最近关于数组的一些东西,所以如果你的答案在这些主题中,谢谢!

【问题讨论】:

  • 你不需要HashMap,你可以用一个整数数组来做,其中数组的索引是字符的ascii值。假设字符集是 ASCII
  • 相信我,我真的不明白你说什么,把我当成菜鸟,只有你给我代码,也许我明白
  • 我已经用代码和逻辑回答了。

标签: java count return duplicates character


【解决方案1】:

您可以使用对象(此处为 String)来跟踪已经遇到的字符。

Scanner console=new Scanner(System.in);
char[] array=console.next().toCharArray();
char[] array2=array;
int count=0;
char m;
String memoryString = "";
for (int i=0; i<array.length; i++) {
    for (int j=0; j<array2.length; j++) {
        if (memoryString.contains(String.valueOf(array[i])) break;
        if (array[i]==array2[j]){
            count=count+1;  
        }
    } //end loop inner
    memoryString+=array[i]
    if (count>=2) {
          System.out.println(array[i]+" is duplicated "+count+" times!");
    }
    count=0;
} //end outer loop

【讨论】:

  • 非常感谢,您的回答正是我想要的,但如果我听起来不傻的话,您能告诉我那个 memoryString 是什么意思吗?它会在每次循环后自动存储每个字符吗?
  • @MahamadHusen 这正是他的角色。它储存你的角色并防止在已经遇到的角色上再次循环。随意投票/接受答案:)
  • 但是为什么当我点击upvote时它变成1然后又变成0?
【解决方案2】:

您可以改为遍历所有可能的字符并查看字符串中存在多少个字符(假设您可以使用字符串而不是字符数组):

while(!str.isEmpty())
{
    int count = 0;
    char c = str.charAt(0);
    while(str.indexOf(c) != -1)
    {
        str = str.replaceFirst(String.valueOf(c), "");
        count++;
    }
    System.out.println("number of " + c + "  " + count);
}

编辑:对我的(糟糕的)假设和使用 256 个字符数的限制做反对,我对其进行了一些修改。希望这会好一点!

【讨论】:

  • 这太可怕了。比蛮力更糟糕。
  • 是的.. 这不是最好的假设。我改变了答案以摆脱那个......
  • 相信我我不明白这一点,正如我所说,我到现在为止唯一研究的是 if/else、循环和有关数组的东西,我本可以使用 hashmap,但我没有在大学
【解决方案3】:

您可以这样做(假设为 ASCII 字符集):

public static void main(String[] args) {
        Scanner console=new Scanner(System.in);
        char[] array=console.next().toCharArray();
        int[] counts = new int[255];

        for(char c : array) {
            counts[c]++;
        }

        for(int i = 0; i < 255; i++){
            if (counts[i] > 1)
                System.out.println("duplicated char: " + (char)i + ", " + counts[i] + "times");
        }
    }

逻辑是:

  • 创建一个整数数组以跟踪每个输入字符的计数
  • 遍历字符串中的每个字符并增加计数。 counts 数组的索引将是字符的 ascii 值。
  • 遍历 counts 数组以确定哪些字符的计数大于 2 并打印出来。

【讨论】:

  • 再一次,有超过 256 个字符。
  • @Tunaki 假设为 ASCII 字符集
猜你喜欢
  • 2019-04-16
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2011-04-15
  • 2018-02-13
相关资源
最近更新 更多