子串起点索引?

时间:2017-10-14 11:29:33

标签: java

我是Java新手,从未见过计算机代码直到一周前,我设法将这些代码放在一起,但不能完全理解以下概念:

当表示我的第一个子字符串从int F开始时,对我来说更有意义的是代码在F = s.length();而不是+1正确执行,因为s是11个字符。在d之后启动一个并且不打印任何内容的索引是s.length()+1;,但似乎在单词结束后将从两个索引开始。就像我的第二个子串一样,当它执行时,G将为3,意味着它将从第二个l开始,并根据需要填补空白。任何人都可以为我解决这个问题吗?

谢谢。

public class Main {
    public static void main(String[] args) {
        String s = "hello world";
        String rep = s.replaceAll("[a-z]", " ");
        int F = s.length()+1;
        int G = 2;

        for(int i = 0; i<s.length(); i++, F--, G++)
            if (i == 0 || i >= s.length()-1){
                System.out.println(s);
            } else {
                System.out.println(s.charAt(0) + rep.substring(F) + s.charAt(i) + 
                    rep.substring(G) + s.charAt(s.length()-1));
            }
    }
}

1 个答案:

答案 0 :(得分:0)

你的思考是正确的;为了完成子字符串,F应该从s.length()开始。你需要添加+ 1的原因是因为你在到达子字符串代码之前经历了一次循环。

第一次浏览循环时,打印出s并继续。现在进行第二次迭代,i = 1G = 3F = s.length(),因为for循环已将{1}添加到iG,并从{{减去1 1}}。

所以,实际上,您关注的子字符串部分确实以{​​{1}}开头,在您的代码中很难看到。

以下是代码的修改版本,它执行相同的操作,但以F开头。

F = s.length()