JAVA中有判断字符开头的方法。
解析日志的时候按照行读取日志,经常使用到String类中startsWith方法来过滤日志,下面来看源码分析一番:
//用法
String s = "asdfsadf";
boolean b = s.startsWith("asd");
//返回一个boolean 判断字段是不是开头。
方法很简单也很好用,下面来看源码
public boolean startsWith(String var1) {
return this.startsWith(var1, 0);
}
//调用的是这个,然后又调用了重载方法startsWith,传了个0
//往下看endsWith一下就能明白,两个方法核心都是一样的
public boolean endsWith(String var1) {
return this.startsWith(var1, this.value.length - var1.value.length);
}
然后就是重头戏了startsWith 判断的核心源码,首先要有个思想–String其实是一个char[],在String中字符的运算都是用char来计算、比较的。
public boolean startsWith(String var1, int var2) {
char[] var3 = this.value;//拿到当前String的char数组
int var4 = var2;//遍历开始index
char[] var5 = var1.value;//拿到入参String的char数组
int var6 = 0;//入参String从0下标开始算
int var7 = var1.value.length;//入参String长度
if (var2 >= 0 && var2 <= this.value.length - var7) {
//是个do while 判断
//while里面判断两个char数组中char字符是否相等,当判断完入参char数组最后一个字符也相等后返回true 其他条件都返回false
do {
--var7;
if (var7 < 0) {
return true;
}
} while(var3[var4++] == var5[var6++]);
return false;
} else {
return false;
}
}