Erste Schritte If Bedingung in Schleife dynamisch erweitern

fetcher

Mitglied
Hallo liebes Forum,
ich möchte eine If-Anweisung dynamisch in einer For-Schleife erweitern. Und weis leider nicht genau wie ich das anstellen soll. Der Suchstring wird mit split(" "); in einzelne Wörter zerhackt.

Anschließend soll die Anweisung:
Java:
if(elem.toLowerCase().contains(Suchstring.toLowerCase()))
			{
				model.addRow(new Object[]{elem});
				anzahlTreffer++;
			}

erweitert werden mit "&&".
Damit meine ich eigentlich:

Java:
			if(elem.toLowerCase().contains(SuchstringSplit[0].toLowerCase()) && elem.toLowerCase().contains(SuchstringSplit[1].toLowerCase()))
			{
				model.addRow(new Object[]{elem});
				anzahlTreffer++;
			}

So wie hier oben sollte das dann aussehen. Nur eben dynamisch in einer For-Schleife, da ich ja vorher nicht weis wieviele Suchbegriffe eingegeben wurden.

Das ist der komplette Code ich hoffe es kann mir hier jemand helfen.

Java:
public DefaultTableModel getTableSuche(String Suchstring)
	{
		String SuchstringSplit[] = Suchstring.split(" ");
		
		
		DefaultTableModel model = new DefaultTableModel(); 
		anzahlTreffer = 0;
		
		model.addColumn("Name"); 
		
		Collections.sort(EinlesenSQL.BuecherArrListSQL);
		
		for(String elem : EinlesenSQL.BuecherArrListSQL)
		{	
			
			/*
			for(int i = 0; i < SuchstringSplit.length; i++)
			{
				
				
				if(elem.toLowerCase().contains(SuchstringSplit[i].toLowerCase()))
				{
					
				}
			}
			*/
			
			
			if(elem.toLowerCase().contains(SuchstringSplit[0].toLowerCase()) && elem.toLowerCase().contains(SuchstringSplit[1].toLowerCase()))
			{
				model.addRow(new Object[]{elem});
				anzahlTreffer++;
			}
			
		}
		
		return model;
		
	}


Vielen Dank
Gruß fetcher
 
Mit einem boolean-Flag?

Java:
import java.util.regex.Pattern;
import java.util.stream.Stream;

public class Test {
  
  public static final String IPSUM_LOREM = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy "
      + "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et "
      + "justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. "
      + "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et "
      + "dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet "
      + "clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
  
  public static void main(String[] args) {
    String[] sentences = IPSUM_LOREM.split(Pattern.quote("."));
    
    String searchCriteria = "lorem ipsum dolor";
    
    // Normal
    for (String sentence : sentences) {
      boolean matchesAll = true;
      for (String criteria : searchCriteria.split(" ")) {
        if (!sentence.toLowerCase().contains(criteria.toLowerCase())) {
          matchesAll = false;
        }
      }
      if (matchesAll) {
        System.out.println(sentence);
      }
    }
    
    // Lambda
    Stream.of(sentences).filter(s -> Stream.of(searchCriteria.split(" ")).map(String::toLowerCase).allMatch(criteria -> s.toLowerCase().contains(criteria)))
    .forEach(System.out::println);
    ;
  }
}
 
Hallo Flown,
vielen Dank für deine Antwort. Ich verstehe den Code leider nicht so ganz. Wie würde das ganze denn mit meinem Beispiel aussehen?


Vielen, vielen Dank.
Gruß
fetcher
 
Wo hakt es denn?

Mit einem boolean Flag sollte es doch gelöst sein. Und ich werde es nicht mit deinem Code machen, denn 1. habe ich mir ihn nicht durchgesehen und 2. Eigeninitiative sollte vorhanden sein.

Prosa:
Iteriere über alle Strings die du prüfen willst.
Java:
for(String s : search) {
Setze boolean flag
Java:
boolean flag = true;
Iteriere über alle Suchkriterien die du haben möchtest und prüfe ob alle in dem String vorhanden sind:
Java:
for(String criteria : searchCriteria.split(" ")) {
  if(!s.toLowerCase().contains(criteria.toLowerCase()) {
    flag = false;
    break; // Kannst du zur Optimierung verwenden um aus der Schleife rauszukommen
  }
}
Nun prüfe ob alle Suchkriterien erfüllt wurden (mit anderen Worten alle drinnen waren und das Flag noch auf true ist)
Java:
 if(flag) {
  // s erfüllt alle deiner Suchkriterien und du kannst mit s weiterarbeiten
  System.out.println(s);
}
}
 
Zuletzt bearbeitet:
Jetzt habe ich es verstanden 🙂 Vielen Dank nochmal.

So sieht jetzt mein Code aus:

Java:
public DefaultTableModel getTableSuche(String Suchstring)
	{
		String SuchstringSplit[] = Suchstring.split(" ");
		
		
		DefaultTableModel model = new DefaultTableModel(); 
		anzahlTreffer = 0;
		
		model.addColumn("Name"); 
		
		Collections.sort(EinlesenSQL.BuecherArrListSQL);
		
		for(String elem : EinlesenSQL.BuecherArrListSQL)
		{	
			boolean matchesAll = true;
			
			
			
			for(int i = 0; i < SuchstringSplit.length; i++)
			{
				
				
				if(!elem.toLowerCase().contains(SuchstringSplit[i].toLowerCase()))
				{
					matchesAll = false;
					break;
				}
			}
		
			
			if(matchesAll)
			{
				model.addRow(new Object[]{elem});
				anzahlTreffer++;
			}
			
		}
		
		return model;
		
	}
 

Zurück
Oben