1

我正在尝试在字符串数组中查找重复的单词。

这是我的比较代码:

   for ( int j = 0 ; j < wordCount ; j++)
   {    
       for (int i = wordCount-1 ; i > j ; i--)
       {       
           if (stringArray[i].compareTo(stringArray[j]) == 0 && i!=j)
           {
               //duplicate
               duplicates++;
           }
       }
   }
   wordCount -= duplicates;
   System.out.print("\nNumber of words, not including duplicates: " + wordCount);

在 if 语句中,它说NullPointerException. 这是什么意思?有一个更好的方法吗?我试着简单地做

if (stringArray[i] == stringArray[j] && i!=j)

但这一直给我错误的答案。

4

5 回答 5

1

您可以这样做以获得更好的性能:

public int getDuplicateCount(Integer[] arr){
     int count = 0;   
     Set<Integer> set = new HashSet<Integer>();
     for (int i = 0; i < arr.length; i++) {
         if (set.contains(arr[i]))
             count++;
         set.add(arr[i]);
      }
      return count;
 }
于 2012-10-18T04:53:40.003 回答
0

空指针可能是因为您的数组中有任何空值。

您的代码不起作用,因为您正在对需要查找重复项的同一数组进行迭代

您可以使用以下代码来计算数组中的重复单词。

public class WordCount {


public static void main(String args[]){
    String stringArray[]={"a","b","c","a","d","b","e","f"};

    Set<String> mySet = new HashSet<String>(Arrays.asList(stringArray));

    System.out.println("Number of duplicate words: "+ (stringArray.length -mySet.size()));

    System.out.println("Number of words, not including duplicates: "+ mySet.size());
}

}
于 2013-01-02T14:53:10.327 回答
0

这意味着stringArray[i]is null,即您的数组null在某处有一个条目。您可能在其他地方有逻辑错误,并且数组的某些元素没有正确设置。

如果您的数组合法地包含空值,则必须在尝试调用方法之前明确检查stringArray[i]

if (stringArray[i] == null){
    // Do whatever
} else if (stringArray[i].compareTo(stringArray[j]) == 0 && i!=j) {
    //duplicate
    duplicates++;
}
于 2012-10-18T04:48:42.657 回答
0

NullPointerException 表示您的数组成员之一未设置(即它为空)

不要使用 == 来比较字符串。

您走在正确的轨道上 - 可能stringArray[]包含一些未设置的成员。Eacy 修复是在使用这些值之前进行空检查。

for ( int j = 0 ; j < wordCount ; j++)
   {    
       for (int i = wordCount-1 ; i > j ; i--)
       {       
           String wordi = stringArray[i];
           String wordj = strinArray[j];
           // If both are null it won't count as a duplicate.
           // (No real need to check wordj - I do it out of habit)
           if (wordi != null && wordj != null && wordi.compareTo(wordj) == 0 && i!=j)
           {
               //duplicate
               duplicates++;
           }
       }
   }
   wordCount -= duplicates;
   System.out.print("\nNumber of words, not including duplicates: " + wordCount);
于 2012-10-18T04:46:28.130 回答
0

在这里,我看到您正在尝试查找给定字符串的唯一元素计数。我建议使用 HashSet 以获得更好的解决方案。

public int getUniqueElements(String str)
{
  HashSet<Character> hSet = new HashSet<>();

  // iterate given string, hSet only adds unique elements to hashset
  for(int i = 0; i < str.length() ; i++
    hSet.add(str.charAt(i));

  return hSet.size();
}
于 2016-10-15T03:12:01.630 回答