查找字符串中的重复或重复字符,并返回Java中的重复次数

时间:2016-03-11 21:48:48

标签: java count return duplicates character

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

我创建了两个具有相同字符的数组,以及两个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,循环,最近还有关于数组的东西,所以如果你的答案就在这个主题中,谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用对象(此处为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

答案 1 :(得分:0)

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

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限制,我稍微改了一下。希望这会好一点!

答案 2 :(得分:-1)

以下是如何执行此操作(假设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值。
  • 执行一次遍历计数数组,找出哪些字符的计数超过2并打印出来。