让我们从头开始:
final Pattern pattern = Pattern.compile("[,\\s*]?([^.]+)\\.([^,]+)[,\\s*]?");
final Map<Long, String> myMap = getMapFromSomewhere();
for(final Map.Entry<Long, String> entry : myMap.entrySet()) {
final String myString = entry.getValue();
final Matcher matcher = pattern.matcher(myString);
final Map<String, List<String>> tokenised = new HashMap<String, List<String>>();
while (matcher.find()) {
final String key = matcher.group(1);
List<String> names = tokenised.get(key);
if(names == null) {
names = new LinkedList<String>();
tokenised.put(key, names)
}
names.add(matcher.group(2));
}
//do stuff with map.
}
正则表达式分解如下:
[,\\s*]?
可选地匹配逗号后跟未知(或零)长度的空格
([^.]+)\\.
匹配到下一站的所有内容,后跟“。”
([^,]+)
将所有内容带到匹配组中的下一个逗号
[,\\s*]?
可选地匹配逗号后跟未知(或零)长度的空格
测试用例:
public static void main(String[] args) {
final Pattern pattern = Pattern.compile("[,\\s*]?([^.]+)\\.([^,]+)[,\\s*]?");
final String myString = "BusinessPartner.name1,BusinessPartner.name2,BusinessPartner.name3,BusinessPartner.name4";
final Matcher matcher = pattern.matcher(myString);
while (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}
}
输出:
BusinessPartner
name1
BusinessPartner
name2
BusinessPartner
name3
BusinessPartner
name4