2017-12-13 16 views
-1

Probleme beim Überprüfen, ob ein Wort von einem String-Array in einem anderen String-Array ist. Das ist, was ich habe, so weit:Überprüfen, ob das String-Array ein Wort in einem anderen String-Array enthält

 FileInputStream fis = new FileInputStream("TranHistory.csv"); 
     InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); 
     CSVReader reader = new CSVReader(isr); 

     String[] groceries = new String[]{"albertsons", "costco"}; 

     for (String[] cols; (cols = reader.readNext()) != null;) { 
      if(cols[4].toLowerCase().contains(groceries)){ 
       System.out.print(cols[4]); 
      } 

     } 

Der obige Code derzeit mir einen Fehler geben, weil .contains() nicht auf String Array angewandt werden. Das funktioniert aber nur, wenn ich die if-Anweisung, um diese Änderung:

 if(cols[4].toLowerCase().contains("albertsons")){ 
       System.out.print(cols[4]); 
     } 

Mein Problem ist, dass String [] Lebensmittel viele Lebensmittelgeschäfte haben wird, so denken zu vergleichen ich String [] col String [] Lebensmittel am meisten Effiziente Art und Weise, dies zu tun, habe ich nur Probleme bei der Umsetzung.

LÖSUNG:

ich es herausgefunden ... Sie for-Schleife eine verschachtelte zu tun haben. Das ist, was ich tat:

String[] groceries = {"albertsons", "costco"}; 

for (String[] cols; (cols = reader.readNext()) != null;) { 
     for (int i = 0; i < groceries.length; i++){ 

      if(cols[4].toLowerCase().contains(groceries[i])) 
      { 
       System.out.print(cols[4]); 
       } 

      } 
     } 

Antwort

2

Ich empfehle eine Set<String> all die Lebensmittel zu schaffen enthält, die Sie haben wollen:

Set<String> groceries = Set.of("albertsons", "costco"); 

for (String[] cols; (cols = reader.readNext()) != null;) { 
    if (groceries.contains(cols[4].toLowerCase()){ 
     System.out.print(cols[4]); 
    } 
} 

in einem Set Suche wird die lineare Zeit nicht nehmen, wie es wäre, wenn Sie hatte ein Array benutzt.

Wie YCF_L und ich erklärte in den Kommentaren unten, können Sie die Set in Java 8 mit initialisieren:

Set<String> groceries = new HashSet<>(Arrays.asList("albertsons", "costco")); 
+0

Ich erhalte eine Fehlermeldung: kann Methode nicht lösen Set.of – Stephan

+1

'Set # von' in Java 9. eingeführt wurde, sollten Sie aktualisieren, wenn Sie nicht bereits haben! –

+1

Wenn Sie nicht updaten wollen (oder können), können Sie 'Set' mit folgendem Befehl initialisieren:' new HashSet <> (Arrays.asList ("albertsons", "costco")); ' –

0

würde ich in der Regel dies über Hashset tun, wie es die Elemente in konstanter Zeit anstatt die lineare Zeit sucht . So können Sie diesen Code für die Suche verwenden. Ich gehe davon aus, dass das gesamte Original-Array aus der Datei gedruckt werden soll, wenn es gefunden wird.

FileInputStream fis = new FileInputStream("TranHistory.csv"); 
InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); 
CSVReader reader = new CSVReader(isr); 

String[] groceries = new String[]{"albertsons", "costco"}; 
Set<String> grocerySet = Arrays.stream(groceries).collect(Collectors.toSet()); 
System.out.println(grocerySet); 
for (String[] cols; (cols = reader.readNext()) != null;) { 
    Set<String> smallGrocerySet = Arrays.stream(cols).collect(Collectors.toSet()); 
    if(grocerySet.containsAll(smallGrocerySet)){ 
     System.out.println(Arrays.toString(cols)); 
    } 
} 
Verwandte Themen