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;
        }
    }