3 回答
TA贡献1796条经验 获得超10个赞
这个答案与 OP 中使用的更手动的方法背道而驰。但是,这在 Java 中使用正则表达式模式匹配器处理起来相当简单。我们可以在模式上进行匹配(.)\\2*,以捕获所有相似字母的组。然后,只需打印出仅作为 3 出现的组。
String line = "aasssfddddvvv";
String pattern = "((.)\\2*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
if (m.group(1).length() == 3) {
System.out.println(m.group(1));
}
}
sss
vvv
TA贡献1775条经验 获得超8个赞
第一个问题是,你试图达到阵列的lenght + 2指数为这是不可能的。
假设字符串长度为 5
0: 0 1 2
1: 1 2 3
2: 2 3 4
3: 3 4 (5)
4: 4 **(5) (6)**
如您所见,您尝试达到5,它不是字符串的一部分。所以试试
for (int i = 0; i < s.length - 2; i++)
代替
for (int i = 0; i < s.length - 1; i++)
提示:您可以从错误中获取此信息。
线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 13
它说你试图达到你不能达到的索引。
第二个问题,您在 if 条件下检查 4 个字符。用:
if (s[i] == s[i + 1] && s[i] == s[i + 2])
代替
if (s[i] == s[i + 1] && s[i] == s[i + 2] && s[i] == s[i + 3])
添加回答
举报