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])
添加回答
舉報