¿Cómo comparar elementos en una matriz de cadenas en java?

Estoy tratando de encontrar palabras duplicadas en una cadena de cadenas.

Aquí está mi código para la comparación:

for ( int j = 0 ; j  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); 

en la sentencia if, dice NullPointerException . ¿Qué significa esto? ¿Hay una mejor manera de hacer esto? Traté simplemente de hacer

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

pero eso me seguía dando respuestas equivocadas.

Puedes hacer esto para mejorar el rendimiento:

 public int getDuplicateCount(Integer[] arr){ int count = 0; Set set = new HashSet(); for (int i = 0; i < arr.length; i++) { if (set.contains(arr[i])) count++; set.add(arr[i]); } return count; } 

La excepción NullPointerException significa que uno de los miembros de su matriz no está establecido (es decir, es nulo)

No utilice == para comparar cadenas.

Está en el camino correcto: es probable que stringArray[] contenga algunos miembros que no están establecidos. Eacy fix es anular la comprobación antes de usar los valores.

 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); 

Significa que stringArray[i] es null , es decir, su matriz tiene una entrada null en alguna parte. Es posible que tenga un error lógico en otro lugar y que algunos elementos de la matriz no se configuren correctamente.

Si su matriz contiene legítimamente nulos, debe verificar esto explícitamente antes de intentar llamar a los métodos en stringArray[i] :

 if (stringArray[i] == null){ // Do whatever } else if (stringArray[i].compareTo(stringArray[j]) == 0 && i!=j) { //duplicate duplicates++; } 

El puntero nulo puede deberse a que tiene un valor nulo en su matriz.

Su código no funciona porque está navegando en la misma matriz en la que necesita encontrar duplicados

puede usar el siguiente código para contar palabras duplicadas en una matriz.

 public class WordCount { public static void main(String args[]){ String stringArray[]={"a","b","c","a","d","b","e","f"}; Set mySet = new HashSet(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()); } } 

Aquí veo que estás tratando de encontrar un número único de elementos para una cadena dada. Sugeriría usar HashSet para una mejor solución.

 public int getUniqueElements(String str) { HashSet 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(); }