我有一個包含名字和姓氏的字符串列表,我有一個自由文本。Java正則表達式在文本中查找所有可能的列表對
List<String> names; // contains: "jon", "snow", "arya", "stark", ...
String text = "jon snow and stark arya";
我一定要找到所有的名字和姓氏,可能與Java正則表達式(因此使用Pattern和Matcher對象)。所以,我想是這樣的:
List<String> foundNames; // contains: "jon snow", "stark arya"
我已經這樣做了2種可能的方式,但不使用正則表達式,它們不是靜態的東陽有一個包含所有名稱的列表「名稱」一類的NameFinder的一部分。
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;
}
或更壞的(非常糟糕)的方式(創建所有可能的對):
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;
}
究竟是什麼問題? –
你爲什麼要用正則表達式來做到這一點? – explv
@JohnBellinger,我會盡力解釋一下。但是,我需要在Java正則表達式的「正常」方法中做我所做的。 –