使用equals()计算数组中的重复字符串

时间:2016-02-06 04:11:50

标签: java arrays string nested-loops

全新的Java,我似乎无法解决这个问题:

我要做的就是打印一个重复的字符串以及它在数组中显示的次数(不使用哈希表或类似的东西,只是非常简单)。

让我们说一个像这样的数组:

tempArray = {"dogs", "cats", "dogs", "dogs", "mice", "snakes", "cats"}

到目前为止,这是我的代码:

int flowerCount = 0;
for (int j = 0; j < tempArray.length - 1; j++) {
        for (int k = j + 1; k < tempArray.length; k++) {
              if( (tempArray[j].equals(tempArray[k])) && (j != k) ) {
                    System.out.println(tempArray[j]);
                    flowerCount++;
               }

         }

 }

显然这不起作用,我在这里做错了什么?这看起来应该很简单,但是我无法获得嵌套循环和反右对齐。

3 个答案:

答案 0 :(得分:1)

计算重复项的一种简单方法是尝试将它们添加到集合中。集合不允许重复,因此每次添加字符串失败时,都是因为字符串已经存在于集合中。

集合中的add()方法返回一个布尔值,指示添加是否成功。如果您尝试添加的字符串已经在集合中,则添加将失败,并且该方法将返回false。

类似于:

HashSet<String> yourSet = new HashSet<>(); //Could be any kind of set, I'm just used to HashSets
int j = 0; j < tempArray.length - 1; j++) {
    if (yourSet.add(tempArray[j]) {
        //String was added succesfully, so it is not a duplicate.
    }  else {
        //String is duplicate.  Increment a duplicate counter for this string (and start at 2, if you want to include the initial occurence that is already in the set
    }
}

答案 1 :(得分:1)

您可以使用Arrays.sort对数组进行排序。这将使相等的元素彼此相邻。然后,您可以使用while循环遍历列表,查找相同的连续元素。

int i = 0;
while (i < arr.length) {
  int start = i;
  while (i < arr.length && arr[i].equals(arr[start])) {
    ++i;
  }
  int count = i - start;
  System.out.println(arr[start] + " " + count);
}

答案 2 :(得分:1)

with array和for

String printed = "";
    for(String auxOne : tempArray){
        int CountRepeat = 0;
        for(String auxTwo : tempArray){
            if(auxOne.equals(auxTwo)){
                CountRepeat++;
            }
        }
        if(CountRepeat>1 && (printed.indexOf(auxOne)==-1)){
            printed += auxOne;
            System.out.println(auxOne + " : " + CountRepeat);
        }
    }

}