Java中str.substring(i,i+3)方法含义及参数i的索引含义咨询
理解Java的
String.substring(int beginIndex, int endIndex)方法 嘿,我来帮你把这个点彻底理清楚!Java里的substring方法规则其实很直白,咱们一步步拆解:
核心参数含义
- 第一个参数
beginIndex(也就是你代码里的i):代表子串的起始索引,这个位置的字符会被包含在结果里。记住Java字符串的索引是从0开始的哦——比如字符串"abcxyz",索引0是'a',1是'b',2是'c',以此类推。 - 第二个参数
endIndex:代表子串的结束索引,这个位置的字符不会被包含在结果里。
所以str.substring(i, i+3)的意思就是:从字符串的第i个索引位置开始,连续取3个字符(因为结束索引减去起始索引等于3,i+3 - i = 3)。举几个具体例子:
- 当
i=0时,substring(0, 0+3)等价于substring(0,3),会取索引0、1、2的字符,也就是字符串的前3个字符。拿你的测试用例"abcxyz"来说,这时候取到的就是"abc"。 - 如果
i=3,substring(3,6)就会取索引3、4、5的字符,也就是"xyz"。
结合你的代码分析
咱们看你写的xyzThere类里的work方法:
- 第一部分判断:
str.substring(0,3).equals("xyz"),这是在检查字符串的前3个字符是不是"xyz",如果是直接返回true——比如测试用例"xyz.abc"就会触发这个条件。 - 循环里的
str.substring(i,i+3).equals("xyz"),是在遍历字符串中所有可能的连续3字符子串,检查有没有"xyz"。同时判断str.charAt(i-1) != '.',是为了排除像"abc.xyz"这种前面带点的情况。(这里提个小建议:循环里的i应该从1开始,不然i=0时i-1=-1会抛出StringIndexOutOfBoundsException,不过你前面已经单独处理了i=0的情况,调整后代码会更稳妥)
附上你的代码方便对照:
public class xyzThere { public static void main(String[] args) { System.out.println(work("abcxyz")); System.out.println(work("abc.xyz")); System.out.println(work("xyz.abc")); } static public boolean work(String str) { if (str.length() >= 3 && str.substring(0,3).equals("xyz")) return true; for (int i=0; i < str.length() - 2; i++) { if ( str.substring(i,i +3).equals("xyz") && str.charAt(i -1) != '.' ) return true; } return false; } }
内容的提问来源于stack exchange,提问作者chetroia
相关产品推荐
相关产品推荐

