for (int i = 0; i < s1.length(); i++) {
for (int j = 0; j < s2.length(); j++) {
if (s1.charAt(i) == s2.charAt(j)) {
result[t++] = String.valueOf(s1.charAt(i));
} else if (s1.charAt(i) != s2.charAt(j)) {
result[t] += String.valueOf(s1.charAt(i)); // 邏輯錯誤:重複累加
}
}
}
問題:雙重迴圈導致同一字元被多次比較,非分隔符字元重複累加到同一索引,且分隔符與子字串界限不明。
public static String[] splitKeepDelim(String src, String delims) {
List parts = new ArrayList<>();
StringBuilder token = new StringBuilder();
for (int i = 0; i < src.length(); i++) {
char c = src.charAt(i);
if (delims.indexOf(c) >= 0) {
if (token.length() > 0) {
parts.add(token.toString());
token.setLength(0);
}
parts.add(String.valueOf(c)); // 分隔符單獨成段
} else {
token.append(c);
}
}
if (token.length() > 0) parts.add(token.toString());
return parts.toArray(new String[0]);
}
String[] r = splitKeepDelim("hello#world?hello#kitty", "#?");
// 輸出: hello, #, world, ?, hello, #, kitty