startsWith(String prefix)是String类的一个方法
String类代表字符串。Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。
/**
* str.startsWith(prefix,toffset)
* 测试此字符串str从指定序列开始,是否是以指定字符串(前缀)开始
* @param prefix 指定前缀
* @param toffset 指定序列
* @return
*/
public boolean startsWith(String prefix, int toffset)
基于jdk1.7,String类的startsWith(String prefix,int toffset)方法源码分析:
public boolean startsWith(String prefix, int toffset) {
// 被比较的字符串(str),转化为char数组
char ta[] = value;
// 指定索引位置
int to = toffset;
// 比较的字符串(指定前缀)转化为char 数组,
char pa[] = prefix.value;
int po = 0;
// 指定前缀字符数组的长度
int pc = prefix.value.length;
// Note: toffset might be near -1>>>1.
// 如果指定索引小于0或者指定索引位置大于目标字符数组的长度与指定前缀字符数组的长度,返回false;
if ((toffset < 0) || (toffset > value.length - pc)) {
return false;
}
// 循环比较pc次,即指定前缀字符数组的长度
//循环比较字符数组(ta[](从索引位置比较)和pa[](全部比较))的字符是否一一相等
while (--pc >= 0) {
// 若相对应的字符有一个不相等,则返回false
if (ta[to++] != pa[po++]) {
return false;
}
}
//全部相等,返回true
return true;
}
toffset > value.length - pc
toffest:表示指定索引
value.length :表示被比较字符串数组(str)的长度
pc:比较字符串数组(prefix)的长度
toffset > value.length - pc 即 toffset + pc > value.length
当指定索引大于两数组的差值时,指定前缀遍历不完,则说明一定不满足条件。返回false;
如果参数表示的字符序列是此对象(str)从索引(toffset)处开始的子字符串,则返回true,否则为false。
测试代码:
public static void main(String[] args) {
String str = "hello,world";
boolean b1 = str.startsWith("hello", 0);
System.out.println(b1);
System.out.println("-------------------");
boolean b2 = str.startsWith("el");
System.out.println(b2);
System.out.println("-------------------");
boolean b3 = str.startsWith("el", 1);
System.out.println(b3);
System.out.println("-------------------");
}
运行结果:
结果分析:
boolean b1 = str.startsWith("hello", 0);
从0号位置比较,prefix.value.length长度的字符一一相等,返回为true;
boolean b2 = str.startsWith("el");
默认从0号位置比较,prefix.value.length长度的字符不相等,返回为false;
boolean b3 = str.startsWith("el", 1);
相比上一条语句,从1号位置比较,prefix.value.length长度的字符一一相等,返回为true;