JList Elemente mit Strings vergleichen

fel1x

Mitglied
Guten Morgen! 🙂
Mein Programm macht mir noch immer zu schaffen. Ich bekomme es nicht hin, diese eine Methode zu schreiben. Eine kurze Erklärung was sie machen soll:
Sie geht die Liste mit den Filenamen durch und überprüft, ob der eingegebene Text mit einem Teil (oder komplett) mit einem File übereinstimmt. Ist das der Fall, wird der Filename zu einer neuen Liste hinzugefügt und zurückgegeben. Mein Problem ist nun, dass wenn es das File XX_DATUM_TEST gibt und ich nach DS suche, das D übereinstimmt und es zur neunen Liste hinzugefügt wird, obwohl es den Zusammenhang mit D UND S nicht gibt. Hier mein Code:
Java:
public List<File> suchen(String find) {
    List<File> matches = new ArrayList<File>();
    find = find.toUpperCase();
    
    if (files != null) {
        for (int i = 0; i < files.length; i++) {
            for (int x = 0; x < files[i].getName().length(); x++) {
                for (int z = 0; z < find.length(); z++) {
                    if (files[i].getName().charAt(x) == (find.charAt(z))) {
                        matches.add(files[i]);
                    }
                 }
              }
           }
        }
    return matches;
}
Ich hoffe mir kann jemand ein bisschen helfen. Danke im Voraus
 
Ich habe es gerade so probiert wie du es meintest. Nur jetzt habe ich das Problem, dass obwohl ich nichts ausgewählt/eingegeben habe, trotzdem gesucht wird und jedes File aufgelistet wird.
Java:
public List<File> suchenOf(String find) {
 List<File> matches = new ArrayList<File>();
 find = find.toUpperCase();

 if ((files != null) && (find != "" || find != " ")) {
  for (int i = 0; i < files.length; i++) {
   if (files[i].getName().indexOf(find) != -1) {
    matches.add(files[i]);
   }
  }
 }
 return matches;
}
 
Java:
find != "" || find != " "
Eins von beiden wir immer true sein und mit dem oder erhält der gesamte Ausdruck daher immer true.

Daher: && - sofern du es so belassen willst. Aber auch das empfehle ich nicht, was passiert, wenn du noch mehr Leerzeichen hast??

Daher:
Java:
"  ".trim().isEmpty()

PS.:
Java:
files != null

Eine null Liste haben zu können ist nicht unbedingt der beste Programmierstil. Wenn möglich schließe diesen Fall vorher aus indem du eine leere Liste bereitstellst.
 
Naja warum sollte man nicht nach Filenamen suchen können die Leerzeichen enthalten? Das wäre mit Deiner Methode nicht mehr möglich.

Aber er will das doch ohnehin ausschließen..
Siehe if ((files != null) && (find != "" || find != " ")) {

Ich wollte ihm nur aufzeigen wie er den 2. Teil des Ausdruckes besser machen kann undabhängig von der möglichen Leerzeichensuche, welche dann nicht mehr geht.
 
Daher: && - sofern du es so belassen willst.
Danke für deine Antwort! Zu den Files: Ein File mit mehreren Leerzeichen ist nicht möglich, weil diese automatisch immer mit zumindest dem Datum generiert werden. Ich hab die Bedingung geändert, nur ändert das leider nichts an der Ausgabe. Ich will mit der Bedingung verhindern, dass wen nach "nichts" gesucht wird, auch keine Filenamen aufgelistet werden, was gerade leider trotzdem passiert. Das wäre der ActionListener, bei dem die Methode aufgerufen wird
Java:
@Override
 public void actionPerformed(ActionEvent e) {
  String ac = e.getActionCommand();
  String[] namen;
  if (ac.equals("suchen")) {
   String[] namen2;
   String auswahl = oberfläche.getItem();
   if (!(auswahl.equals("Keine Auswahl"))) {
    List<File> liste2 = filesucher.suchenOf(auswahl);
    //if(liste2.size() == 0) {
     //oberfläche.clearAusgabe();
    //}
    for (int i = 0; i < liste2.size(); i++) {
     namen2 = new String[liste2.size()];
     namen2[i] = liste2.get(i).getName();
     oberfläche.addEntry(namen2[i]);
    }
   }
   
   String find = oberfläche.getEingabe();
   List<File> liste = filesucher.suchenOf(find);
   for (int i = 0; i < liste.size(); i++) {
    namen = new String[liste.size()];
    namen[i] = liste.get(i).getName();
    oberfläche.addEntry(namen[i]);
   }
  }
 }
 
Java:
for (int i = 0; i < liste2.size(); i++) {
     namen2 = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL][liste2.size()];
     namen2[i] = liste2.get(i).getName();
     oberfläche.addEntry(namen2[i]);
    }

Du erstellst in jedem Schleifendurchlauf ein neues Array. Der Eintrag vom vorherigen Durchlauf ist dann weg.
 
Java:
for (int i = 0; i < liste2.size(); i++) {
     namen2 = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL][liste2.size()];
     namen2[i] = liste2.get(i).getName();
     oberfläche.addEntry(namen2[i]);
    }

Du erstellst in jedem Schleifendurchlauf ein neues Array. Der Eintrag vom vorherigen Durchlauf ist dann weg.
Mhm stimmt, jetzt wo du es erwähnst...
Java:
if (!(auswahl.equals("Keine Auswahl"))) {
  List<File> liste2 = filesucher.suchenOf(auswahl);
  namen2 = new String[liste2.size()];
  for (int i = 0; i < liste2.size(); i++) {
   namen2[i] = liste2.get(i).getName();
   oberfläche.addEntry(namen2[i]);
Ich habe das erstellen von namen2 ober die for schleife gegeben, hat aber irgendwie keine Auswirkung auf das ergebnis
 
1) Was gibt "oberfläche.getItem()" zurück?
2) Was gibt "oberfläche.getEingabe()" zurück?
3) Wie sieht die Datei-Liste in filesucher aus (die genauen Elemente)?
4) Was wird in der Liste mit "addEntry" hinzugefügt (die genauen Einträge)?
5) Wie sieht die "suchenOf"-Methode jetzt aus?
 

Zurück
Oben