startsWith(String prefix,int toffset)源码分析

本文深入解析了Java中String类的startsWith(String prefix, int toffset)方法,该方法用于检查字符串是否从指定位置开始以指定前缀开头。源码分析展示了如何进行字符数组的比较,并通过示例代码演示了不同参数下的运行结果。文章着重于理解方法的工作原理和应用场景。
摘要由CSDN通过智能技术生成

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值