样本
String str = "fghhhhjkjkljhdd"
我需要将其转换为输出字符串" fgh4jkjkljhd2"
我有以下代码但这里的问题是我只得到一个匹配的出现 - " hhhh"。我仍然缺少" dd"。 一旦这个问题得到解决,我可以考虑如何为字符串分配匹配并在那里计算字符,但是现在我无法获得多个匹配。任何指针都表示赞赏。
String str = "fghhhhjkjkljhdd";
Pattern p = Pattern.compile("(\\w)\\1+");
Matcher m = p.matcher(str);
if (m.find()) System.out.println(m.group());
答案 0 :(得分:4)
您可以使用捕获组包装量化的反向引用,以便以后能够访问此值,并使用Matcher#appendReplacement
实际修改字符串中的匹配项:
String text = "fghhhhjkjkljhdd";
String regex = "(\\w)(\\1+)";
Pattern r = Pattern.compile(regex);
Matcher m = r.matcher(text);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, m.group(1) + (m.group(2).length()+1));
}
m.appendTail(sb);
System.out.println(sb); // => fgh4jkjkljhd2
请参阅https://developers.google.com/web/fundamentals/security/csp/。
答案 1 :(得分:0)
您也可以使用简单的循环
进行尝试 String str = "fghhhhjkjkkljhdd";
StringBuffer sb = new StringBuffer(String.valueOf(str.charAt(0)));
char lastChar = str.charAt(0);
int counter = 1;
for (int i = 1; i < str.length(); i++) {
if (str.charAt(i) == lastChar) {
counter++;
} else {
lastChar = str.charAt(i);
if (counter != 1) sb.append(counter);
sb.append(lastChar);
counter = 1;
}
}
if(counter != 1) sb.append(counter);
System.out.println(sb.toString());
//fgh4jkjk2ljhd2