如何在字符串数组

时间:2015-06-11 06:16:57

标签: java

我有以下代码,我只想检索那些重复但找不到正确结果的值。我不知道我哪里错了。

public class TestDummy {
    public static void main(String args[]){
       String arr[] ={"lady", "bird", "is","bird","lady","cook"};
       int len = arr.length;
       System.out.println("Size "+len);
       for(int i=0 ; i<=len;i++){
           for(int j=1 ; j< len-1;j++){
            if(arr[i]==arr[j]){
              System.out.println("Duplicate "+arr[i]);
          } 
       }  
           }
    }


}

9 个答案:

答案 0 :(得分:3)

    String arr[] ={"lady", "bird", "is","bird","lady","cook"};
    Map<String, Integer> map = new HashMap<>();
    for(String str: arr) {
        if(map.containsKey(str)) {
            map.put(str, map.get(str)+1);
        } else{
            map.put(str, 1);
        }
    }
    for(String str: map.keySet()) {
        if(map.get(str) > 1) {
            System.out.println("Duplicate: "+ str+" count:"+map.get(str));
        }
    }

输出:

Duplicate: bird count:2
Duplicate: lady count:2

答案 1 :(得分:1)

您必须将代码更改为:

public static void main(String args[]) {
        String arr[] = { "lady", "bird", "is", "bird", "lady", "cook" };
        int len = arr.length;
        System.out.println("Size " + len);
        for (int i = 0; i < len; i++) { // not <= but only <
            for (int j = i + 1; j < len; j++) {  // start from i+1 and go upto last element
                if (arr[i].equals(arr[j])) { // use equals()
                    System.out.println("Duplicate " + arr[i]);
                }
            }
        }
    }

O / P:

Size 6
Duplicate lady
Duplicate bird

答案 2 :(得分:0)

Firsty Strings将与.equals()而非==

进行比较
if(arr[i].equals(arr[j]))
{
   System.out.println("Duplicate "+arr[i]);
}

我建议您使用sets,因为他们不允许在其中输入重复值,或者列表并使用.contains()方法检查它是否已存在。

List<String> list = new ArrayList();

for(int i = 0; i < arr.length; i++)
   if(list.contains(arr[i])
     System.out.println("Duplicate" + arr[i]);
   else
     list.add(arr[i]); 

答案 3 :(得分:0)

您可以使用更简单的方法,如下所示

Set<String> strings=new Hashset<String>();
for(int i=0;i<len;i++){
    if(strings.add(arr[i])==false){
        System.out.println(arr[i]+" is a duplicate");
    }
}

并在现有代码中执行arr[i].equals(arr[j]),以查看值是否相等(如果它们相等则重复)

==检查引用等价,而equals()方法检查值等价,所以当你需要检查两个对象的等价时你应该使用equals方法

希望它有所帮助!

祝你好运!

答案 4 :(得分:0)

有一些问题。

   for(int i=0 ; i<len;i++){
       for(int j=i +1 ; j< len;j++){
        if(arr[i].equals(arr[j])){
          System.out.println("Duplicate "+arr[i]);
      } 
   }  
       }

请注意:我已将j=1更改为j=i,将==更改为.equals,将<=更改为<len -1len

答案 5 :(得分:0)

这会为您提供一份包含重复项及其计数的列表:

var duplicates =
from word in arr
group word by word into g
where g.Count() > 1
select new { g.Key, Count = g.Count() };    

答案 6 :(得分:0)

创建单词和出现的地图。

import java.util.*;

public class TestDummy {
    public static void main(String args[]) {
        String arr[] = {
            "lady", "bird", "is", "bird", "lady", "cook"
        };
        Map<String, Integer> dictionary = new TreeMap<>();

        int len = arr.length;
        System.out.println("Size " + len);
        for (int i = 0; i < len; i++) {
            if (dictionary.containsKey(arr[i])) {
                dictionary.put(arr[i], dictionary.get(arr[i]) + 1);
                System.out.format("Duplicate %s%n", arr[i]);
            } else {
                dictionary.put(arr[i], 1);
            }
        }
    }
}



**Output**
    Size 6
    Duplicate bird
    Duplicate lady

答案 7 :(得分:0)

public static String[] removeDuplicates(String[] array){                                           
    return new HashSet<String>(Arrays.asList(array)).toArray(new String[0]);       
}                                                                                   

答案 8 :(得分:0)

以上解决方案确实有效 但只是为了使代码清洁,您可以使用Linq.js