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:
publicList<File>suchen(String find){List<File> matches =newArrayList<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:
publicList<File>suchenOf(String find){List<File> matches =newArrayList<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;}
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.
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.
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:
@OverridepublicvoidactionPerformed(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 =newString[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 =newString[liste.size()];
namen[i]= liste.get(i).getName();
oberfläche.addEntry(namen[i]);}}}
Beide Teilausdrücke werden sogar immer true sein. Strings (insbesondere bei Benutzereingaben) vergleicht man niemals per == oder != sondern immer per equals().
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?
Beide Teilausdrücke werden sogar immer true sein. Strings (insbesondere bei Benutzereingaben) vergleicht man niemals per == oder != sondern immer per equals().