String源码分析(五)

108 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情

在这里插入图片描述

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家,51CTO明日之星 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈

String源码分析(五)总结 🤞这次都给他拿下🤞

正菜来了⛳⛳⛳

🎈String类中相关的函数

🍮startsWith(String prefix, int toffset)

含义:这个函数的主要作用就是查看当前String字符传中是否从toffset开始的prefix.length()长度字符串等于prefix. 官方:测试从指定索引开始的此字符串的子字符串是否以指定前缀开头。

public boolean startsWith(String prefix, int toffset) {
    char ta[] = value;
    int to = toffset;
    char pa[] = prefix.value;
    int po = 0;
    int pc = prefix.value.length;
    // Note: toffset might be near -1>>>1.
    if ((toffset < 0) || (toffset > value.length - pc)) {
        return false;
    }
    while (--pc >= 0) {
        if (ta[to++] != pa[po++]) {
            return false;
        }
    }
    return true;
}

🍮startsWith(String prefix)

含义:这个和上边的函数差不多,就是查询当前字符串的前缀是不是prefix,但是没有指定当前字符串开始的位置,默认的就会调用上边的函数并传入默认值0为当前String对象字符开始的位置。

public boolean startsWith(String prefix) {
    return startsWith(prefix, 0);
}

🍮endsWith(String suffix)

含义:这个表示的是String字符串中是否以suffix作为结尾,只不过还是调用上边的startsWith函数,其开始位置变为字符串的长度减去子字符串的长度

public boolean endsWith(String suffix) {
        return startsWith(suffix, value.length - suffix.value.length);
    }

🍮hashCode()

含义:返回此字符串的哈希码,计算的方式如下 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

🍮indexOf(int ch)

含义:返回此字符串中第一次出现指定字符的索引。如果值 ch 的字符出现在此 String 对象表示的字符序列中,则返回第一次出现的索引(以 Unicode 代码单位表示),因为没有指定当前字符串开始的位置,所以默认是从index=0的位置开始的,会调用indexOf(char,index)这个函数。

public int indexOf(int ch) {
    return indexOf(ch, 0);
}

🍮indexOfSupplementary(ch,fromIndex)

含义:这个函数主要是从指定的索引位置开始查找对应字符是否存在,但是使用补充字符处理(罕见的) indexOf 调用。

private int indexOfSupplementary(int ch, int fromIndex) {
    if (Character.isValidCodePoint(ch)) {
        final char[] value = this.value;
        final char hi = Character.highSurrogate(ch);
        final char lo = Character.lowSurrogate(ch);
        final int max = value.length - 1;
        for (int i = fromIndex; i < max; i++) {
            if (value[i] == hi && value[i + 1] == lo) {
                return i;
            }
        }
    }
    return -1;
}

🍮lastIndexOf(int ch)

含义:这个主要是查询某个字符最后一次出现的位置,因为查找的时候是从末尾开始查找的,所以会调用lastIndexOf函数,指定字符和从后向前遍历的位置。

public int lastIndexOf(int ch) {
    return lastIndexOf(ch, value.length - 1);
}

🍮indexOf(String str)

含义:这个函数的意思就是在当前String字符串中查看是否存在str子字符串,,因为没有指定开始比对的位置,所以就默认使用0作为开始位置进行查找。

public int indexOf(String str) {
    return indexOf(str, 0);
}

🍮lastIndexOf(String str)

含义:这个函数的意思是在String字符串中查找str字符串的位置,只不过是从后网签进行查找。

public int lastIndexOf(String str) {
    return lastIndexOf(str, value.length);
}

🍮substring(beginIndex)

含义:这个函数的意思是指找一个开始的位置进行子字符串的截取,长度为开始位置到字符串最后位置的索引。

public String substring(int beginIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    int subLen = value.length - beginIndex;
    if (subLen < 0) {
        throw new StringIndexOutOfBoundsException(subLen);
    }
    return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}

除了这个还有指定开始和结束位置,创建一个新的字符串。

🍚总结

以上是关于String类中的相关函数的分析,希望有所帮助,Written By 知识浅谈