持续创作,加速成长!这是我参与「掘金日新计划 · 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 知识浅谈