1、startswith(string prefix, int toffset)方法
包括startswith(*),endswith(*)方法,都是呼叫上述乙個方法
1public
boolean startswith(string prefix, int
toffset)
11while (--pc >= 0) 15}
16return
true
;17 }
上述演算法的時間複雜度,最差的情況下為o(n)(取決於匹配子串的長度),最理想的情況下為o(1);
2、indexof方法
有多個過載的方法,引數可以為字元,也可以為字串
1static
int indexof(char source, int sourceoffset, int
sourcecount,
2char target, int targetoffset, int
targetcount,
3int
fromindex)
7if (fromindex < 0)
10if (targetcount == 0)
1314
char first =target[targetoffset];
15int max = sourceoffset + (sourcecount -targetcount);
1617
for (int i = sourceoffset + fromindex; i <= max; i++)
2223
/*found first character, now look at the rest of v2
*/24
if (i <=max) 34}
35}36return -1;
37 }
這個匹配子串的方法比較複雜,值得深入研究
3、substring方法
在jdk1.7之前的**中,substring存在嚴重記憶體洩露問題,然而,這個問題在jdk1.7之後的版本中都有了改善;
因為jdk1.7中修改了構造方法,呼叫arrays.copyofrange()方法,只是複製出陣列的一部分;
關於string類的構造方法,可以參看: jdk中string類的原始碼分析(一)
4、concat方法
連線兩個字串
1public
string concat(string str)
6int len =value.length;
7char buf = arrays.copyof(value, len +otherlen);
8str.getchars(buf, len);
9return
new string(buf, true
);10 }
5、split方法,切割字串
1public string split(string regex, int
limit) else 28}
29//
if no match was found, return this
30if (off == 0)
31return
new string;
3233
//add remaining segment
34if (!limited || list.size() 35list.add(substring(off, value.length));
3637
//construct result
38int resultsize =list.size();
39if (limit == 0)
40while (resultsize > 0 && list.get(resultsize - 1).length() == 0)
41 resultsize--;
42 string result = new
string[resultsize];
43return list.sublist(0, resultsize).toarray(result);44}
45return pattern.compile(regex).split(this
, limit);
46 }
6、trim方法,去除字串兩端的空格
1public
string trim()
9while ((st < len) && (val[len - 1] <= ' '))
12return ((st > 0) || (len < value.length)) ? substring(st, len) : this
;13 }
演算法時間複雜度在o(log(n))左右,擷取,建立乙個新的字串;
總結:在string類中的大多數方法,都存在new物件的操作,因為string的不可變性,如果大量的呼叫這些方法,在記憶體中會產生大量的string物件;
這樣對gc的壓力很非常大,很可能會出現記憶體溢位;
JDK原始碼解析 String類
equals方法相信大家都比較熟悉和了解了,string的equals方法主要用來比較string物件內容序列的異同,原始碼如下 public boolean equals object anobject 判斷是否是string型別 if anobject instanceof string ret...
JDK中String類的原始碼分析 一
1 string類是final的,不允許被繼承 1 the value is used for character storage.2 private final char value 34 cache the hash code for the string 5 private int hash ...
JDK 10 原始碼之String類
一 成員變數 1 stable 表示安全,該欄位不會為null。private final byte value 位元組陣列儲存字串的值 2 cache the hash code for the string private int hash default to 0 3 private fina...