详解java中的String类的substring()方法
substring()方法功能:
substring()方法是String类的一个方法,故该方法的调用者为String类的对象,即字符串。
str.substring(indexStart,indexEnd)功能为:截取方法调用者(即str)的从indexStart到indexEnd(包括indexStart,不包括indexEnd;即含头不含尾、或左闭右开区间内的子字符串)。
举个例子:
程序1:
String str = "0123456789";
System.out.println(str.substring(1, 3));
上面程序1输出的结果应该为:12。截取字符串str第1个位置到第3个位置之间的子字符串,含头不含尾,即包含第1个位置,而不包含第3个位置,因此结果为第12。
关于substring(indexStart,indexEnd)方法的补充说明:
1、如果indexStart等于indexEnd,substring()方法返回一个空字符串;
2、如果任一参数小于0,则被当做0;
3、如果任一参数大于str.lengtn(),则被当做str.lengtn()。
关于说明1,举个例子:
程序2:
String str = "0123456789";
System.out.println(str.substring(1,1));
上面程序2截取字符串"0123456789"的第1个位置到第1个位置的子串。由于substring()方法在截取字符串子串时,含头不含尾,即要包含第1个位置,又不能包含第1个位置,形成矛盾,故返回一个空字符串。
上述程序的结果为空字符串,如下图:
关于说明2:
由于字符串的起始位从0开始,若substring()方法任一参数小于0,则被当做0。
关于说明3:
程序3:
String str = "0123456789";
System.out.println(str.substring(0,11));
由于字符串str的长度为10(注意字符串从第0位开始计数,它的长度是其最后一位+1),而第2个参数是11,大于字符串的长度,则被当成字符串的长度10。故程序3的输出结果为完整字符串。
程序3的输出结果:
程序3等价于如下程序4:
String str = "0123456789";
System.out.println(str.substring(0,str.length()));
这里还要区别于程序5的输出结果:
程序5:
String str = "0123456789";
System.out.println(str.substring(0,9));
程序5结果:
原因即在于字符串的长度是其最后一位+1,根据含头不含尾原则,程序4输出str的第0位到第9位,而程序5输出str的第0位到第8位