Ich habe die folgende Java-Funktion. Was wir suchen, ist das erste Auftreten aus der Liste listToSearchFor in der Name.Java RegEx das erste Vorkommen von RegEx-Muster in der Input-String finden
Wir wollen JR als die Ausgabe erhalten, da es zuerst in der Array-Liste erscheint.
Wir bekommen SR (wie dies wie RegEx arbeitet)
Im Grunde, was Ehrfurcht versuchen, wenn wir durchqueren die Arraylist von links-> Right jedes Element zu nehmen und eine Suche in der gegebenen tun Eingabe, falls Übereinstimmung gefunden wurde, weiterfahren. Rechts
public static String findTheFirstOccurenceFromTheList() {
String name = "CHRIS SR (A BAD BOY Parenthesis) DAVID JR CARNER";
public static List<String> listToSearchFor = Arrays.asList(" I ", " JR ", " SR ", " III ", " II ", " IV ", "2ND ", "3RD ", "4TH ", "5TH ", "6TH ", "7TH ", "8TH ", "9TH ");
String suffix = null;
int startPos = 0;
int endPos = 0;
Pattern pattern = Pattern.compile(listToSearchFor.stream().map(String::valueOf).map(Pattern::quote).collect(Collectors.joining("|")));
Matcher match = pattern.matcher(name);
while (match.find()) {
suffix = match.group();
startPos = match.start();
endPos = match.end();
break;
}
return suffix;
}
Von Mustervergleich wir verstehen, dass die Reihenfolge von links-> ist Warum wird die Ausgabe 'JR' erwartet, wenn' SR' ebenfalls eine erwartete Übereinstimmung ist? – anubhava
'while (bool) {Anweisungen; break;}' sieht so aus, als ob es sehr ähnlich zu 'if (bool) {Anweisungen;} 'ist. Warum verwenden Sie eine while-Schleife als if-Anweisung? – phflack
Sind Sie gezwungen, Regexes dafür zu verwenden? Es ist nicht wirklich, wofür sie bestimmt sind, aber sie können anstelle von 'String.contains (String)' – phflack