在java中通过索引从字符串中获取字符

时间:2018-01-27 21:13:56

标签: java for-loop

我可能只是累了,不再正常思考,但为什么“13”只在这里打印一次? (intelliJ告诉我“i == 11 | i == 13”总是如此,但我不知道这有多大意义)

        for (int i = 0; i < 14; i++) {
            System.out.println(i);
            String line = clientReader.readLine();
            int length = line.length();
            if (i == 0 || i == 5 || i == 6) {
                line = line.substring(7, length - 6);
            } else if (i == 1 || i == 2 || i == 3 || i == 4 || i == 8 || i == 9 || i == 10 || i == 12) {
                line = line.substring(8, length - 7);
            } else if (i == 7) {
                line = line.substring(9, length - 8);
            } else if (i == 11 || i == 13) {
                line = line.substring(10, length - 9);

            }
            data[i] = line;
            System.out.println(i);
        }

P.S。 line.substring不会出错,如果我在最后一个else的末尾添加System.out.println(line),如果它打印正确的东西。

1 个答案:

答案 0 :(得分:2)

最后一个else if始终为true,因为您的循环控制变量从0开始运行到13,并且在最后else if之前检查过的唯一两个数字} 1113因此,如果以上条件均不属实,那么i将为1113因此,为什么IntelliJ足够聪明才能知道它总是正确的,因此当不满足上述条件时,控制将始终绑定在最后else if块内。

如果您将循环条件增加到i < 15或更高级别,那么IntelliJ将不会状态else if (i == 11 || i == 13)始终为真,因为i可能是14。< / p>