Ich habe eine Liste von Strings mit Namen und Nachnamen und ich habe einen freien Text.Java Regex in einem Text alle möglichen Paare einer Liste zu finden
List<String> names; // contains: "jon", "snow", "arya", "stark", ...
String text = "jon snow and stark arya";
Ich habe alle Namen und Vornamen zu finden, die möglicherweise mit einem Java Regex (so mit Mustern und Objekten Matcher). Deshalb möchte ich so etwas wie:
List<String> foundNames; // contains: "jon snow", "stark arya"
Ich habe dieses Bild 2 Möglichkeiten gemacht, aber ohne Regex zu verwenden, sie sind nicht statisch beacause Teil einer Klasse, die Namefinder eine Liste „Namen“, die alle Namen enthält.
public List<String> findNamePairs(String text) {
List<String> foundNamePairs = new ArrayList<String>();
List<String> names = this.names;
text = text.toLowerCase();
for (String name : names) {
String nameToSearch = name + " ";
int index = text.indexOf(nameToSearch);
if (index != -1) {
String textSubstring = text.substring(index + nameToSearch.length());
for (String nameInner : names) {
if (name != nameInner && textSubstring.startsWith(nameInner)) {
foundNamePairs.add(name + " " + nameInner);
}
}
}
}
removeDuplicateFromList(foundNamePairs);
return foundNamePairs;
}
oder in einem schlechteren (sehr schlecht) Art und Weise (alle möglichen Paare zu schaffen):
public List<String> findNamePairsInTextNotOpt(String text) {
List<String> foundNamePairs = new ArrayList<String>();
text = text.toLowerCase();
List<String> pairs = getNamePairs(this.names);
for (String name : pairs) {
if (text.contains(name)) {
foundNamePairs.add(name);
}
}
removeDuplicateFromList(foundNamePairs);
return foundNamePairs;
}
Was genau ist die Frage? –
Warum würden Sie Regex verwenden, um das zu tun? – explv
@JohnBellinger, ich werde versuchen, es in einem Moment besser zu erklären. Allerdings muss ich tun, was ich in einer "normalen" Methode mit Java Regex gemacht habe. –