我正在做一个有趣的简单练习。我拿一个字符串并获得最长的子字符串:
1. At least one upper case character.
2. No digits.
然而,当我循环后跟子串“a0Ba”:
for (int i = 0; i < s.length(); i++) {
if (Character.isLetter(s.charAt(i))) {
substring += s.charAt(i);
}
else {
arr.add(substring);
substring = "";
}
}
它似乎停在零而不是继续。即使有效的子串“Ba”紧随其后。
当我使用此子字符串运行时:“AsdF0ASDFGffdfr09asd0sd0sd0e”
它工作正常,花花公子并返回正确的子字符串:“ASDFGffdfr”
这是为什么?我很困惑
答案 0 :(得分:1)
当正确的子字符串位于输入的末尾时会出现问题,因为只有在看到数字时才将候选字符添加到列表中。
在循环后将substring
的测试添加为非空,并将其添加到arr
以解决问题:
// The loop portion of your code remains unchanged:
for (int i = 0; i < s.length(); i++) {
if (Character.isLetter(s.charAt(i))) {
substring += s.charAt(i);
} else {
arr.add(substring);
substring = "";
}
}
// Add this code to fix the problem:
if (!substring.isEmpty()) {
arr.add(substring);
}