【问题标题】:Java string loop stops after digitJava字符串循环在数字后停止
【发布时间】:2017-08-21 18:23:34
【问题描述】:

为了好玩,我正在做一个简单的练习。我取一个字符串并得到最长的子字符串:

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”

这是为什么?我很困惑

【问题讨论】:

  • 你能把它写成minimal reproducible example的形式吗?你如何获得输出? arr 是什么?等
  • @LukasWiklund OP 的问题说它适用于该输入。有问题的输入是"a0Ba"
  • ericlippert.com/2014/03/05/how-to-debug-small-programs -- 具体来说,在这种情况下,您的程序足够短,您可以手动(即用铅笔和纸)逐步检查它对失败输入的作用,并亲自查看是什么错误的。 “橡皮擦”可能也会有所帮助。

标签: java string loops substring


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多