首先,你的模式不会给你你想要的。您应该将您的正则表达式更改为: -
"(\\S)\\1+"
获得单个字符的重复。
现在要获取重复的位置和次数,您可以维护一个Map<String, List<Integer>>
, 来存储每个重复的位置。
此外,您不需要for
在while
. while 循环足以遍历所有模式。
这是您修改后的代码:-
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
String s = "AAAABBBBAAAANNNNAAAABBBBNNNBBBBAAAA";
Matcher m = Pattern.compile("(\\S)\\1+").matcher(s);
while (m.find())
{
String str = m.group();
int loc = m.start();
// Check whether the pattern is present in the map.
// If yes, get the list, and add the location to it.
// If not, create a new list. Add the location to it.
// And add new entry in map.
if (map.containsKey(str)) {
map.get(str).add(loc);
} else {
List<Integer> locList = new ArrayList<Integer>();
locList.add(loc);
map.put(str, locList);
}
}
System.out.println(map);
输出 : -
{AAAA=[0, 8, 16, 31], BBBB=[4, 20, 27], NNNN=[12], NNN=[24]}