una - comparar un string con un arreglo java
cómo comparar elementos en una matriz de cadenas en java? (5)
Estoy tratando de encontrar palabras duplicadas en una matriz de cadenas.
Aquí está mi código para la comparación:
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);
en la declaración if, dice NullPointerException
. ¿Qué significa esto? ¿Hay una mejor manera de hacer esto? Intenté simplemente hacer
if (stringArray[i] == stringArray[j] && i!=j)
pero eso siguió dándome respuestas incorrectas.
NullPointerException significa que uno de los miembros de la matriz no está configurado (es decir, es nulo)
No use == para comparar cadenas.
Está en el camino correcto; es probable que stringArray[]
contenga algunos miembros que no están configurados. La corrección de Eacy es anular la verificació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);
Puedes hacer esto para un mejor desempeño:
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;
}
Significa que stringArray[i]
es null
, es decir, su matriz tiene una entrada null
en alguna parte. Es posible que tenga un error de lógica en otro lugar y algunos elementos de la matriz no se están configurando correctamente.
Si su matriz contiene legítimamente valores 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 ser porque tiene cualquier valor nulo en su matriz.
Su código no funciona porque está funcionando en la misma matriz en la que necesita encontrar duplicados
puede usar el siguiente código para contar palabras duplicadas en el conjunto.
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());
}
}
Aquí veo que estás tratando de encontrar elementos únicos para una cadena determinada. Sugeriría usar HashSet para una mejor solución.
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();
}