java substring可以在超出范围的索引上运行吗?

时间:2014-11-24 05:57:29

标签: java string

public class Main {


    public static String reverseWords(String s) {
        StringBuilder reversed = new StringBuilder();
        int j = s.length();
        for (int i = s.length() - 1; i >= 0; i--) {
            if (s.charAt(i) == ' ') {
                j = i;
            } else if (i == 0 || s.charAt(i - 1) == ' ') {
                if (reversed.length() != 0) {
                    reversed.append(' ');
                }
                reversed.append(s.substring(i, j));
            }
        }
        return reversed.toString();
    }

    public static void main(String[] args) {

        String str = "sky is blue";
        String retStr = reverseWords(str);
        System.out.println(retStr);

    }
}

这是一个经过验证的可运行和核心的母鹿。 IT反向句子的顺序。

但这一行。

 reversed.append(s.substring(i, j));

它将在第一次被调用为s.substring(7,11)并且s是"天空是蓝色"。 所以你可以看到索引7是' b'但索引11是在'之后。

在c ++中我知道这个问题。但是为什么在Java中,这很好?如此迷茫。 我检查了java文档,它说substring()接受开始和结束索引。 我现在不知道。

需要帮助 感谢

1 个答案:

答案 0 :(得分:1)

子字符串从指定的beginIndex开始,并扩展到索引endIndex - 1处的字符。