Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Erste SchritteIf Bedingung in Schleife dynamisch erweitern
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.
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.
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);
;
}
}
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);
}
}