equals方法相信大家都比較熟悉和了解了,string的equals方法主要用來比較string物件內容序列的異同,原始碼如下:
public boolean equals
(object anobject)
// 判斷是否是string型別
if(anobject instanceof
string
)return
true;}
}return
false
;}
contentequals與equals方式差不多(唯一區別就是equals方法只能是string而這個方法只要是charsequence子類都可以)如:stringbuffer,stringbuilder與string的比較
// 與equals方式差不多(唯一區別就是equals方法只能是string而這個方法只要是charsequence子類都可以)
public boolean contentequals
(charsequence cs)
}else
}// argument is a string
if(cs instanceof
string
)// argument is a generic charsequence
char v1[
]= value;
int n = v1.length;
if(n != cs.
length()
)for
(int i =
0; i < n; i++)}
return
true
;}
它是先比較對應字元的大小(ascii碼順序),如果第乙個字元和引數的第乙個字元不等,結束比較,返回他們之間的差值,如果第乙個字元和引數的第乙個字元相等,則以第二個字元和引數的第二個字元做比較,以此類推,直至比較的字元或被比較的字元有一方結束,原始碼如下:
public int compareto
(string anotherstring)
k++;}
return len1 - len2;
}
這個方法是用來判斷從toffset開始,prefix與當前字串是否相等
public boolean startswith
(string prefix, int toffset)
// 從當前字串char陣列索引位置開始查詢傳入的字串是否與之相等
while
(--pc >=0)
}return
true
;}
這個方法是用來判斷當前字元的長度和傳入字串長度相減作為索引,來判斷後面是否相等,如:判斷檔案字尾名等,原始碼如下:
public boolean endswith
(string suffix)
返回指定字元在字串中第一次出現處的索引,如果此字串中沒有這樣的字元,則返回 -1
返回從fromindex開始在字串中第一次出現處的索引,如果此字串中沒有這樣的字元,則返回 -1
返回指定字元在字串中第一次出現處的索引,如果此字串中沒有這樣的字元,則返回 -1
返回從fromindex開始在字串中第一次出現處的索引,如果此字串中沒有這樣的字元,則返回 -1
擷取從beginindex到endindex位置的字串,原始碼如下:
public string substring
(int beginindex, int endindex)
// 結束位置大於當前字串的長度
if(endindex > value.length)
// 結束位置比開始位置小時
int sublen = endindex - beginindex;
if(sublen <0)
// 如果開始位置等於0並且結束位置等於當前字串的長度返回自己本身,否則擷取
return
((beginindex ==0)
&&(endindex == value.length))?
this
:new
string
(value, beginindex, sublen);}
public
string
(char value[
], int offset, int count)
if(count <=0)
if(offset <= value.length)
}// note: offset or count might be near -1>>>1.
if(offset > value.length - count)
this
.value = arrays.
copyofrange
(value, offset, offset+count);}
public
static char[
]copyofrange
(char[
] original, int from
, int to)
/** * @param src 原陣列
* @param srcpos 從元資料的起始位置開始
* @param dest 目標陣列
* @param destpos 目標陣列起始位置
* @param length 要copy的長度
*/public
static
void
arraycopy
(object src, int srcpos, object dest, int destpos, int length)
根據正規表示式分割字串,limit限定分割後的子字串個數,超過數量限制的情況下前limit-1個子字串正常分割,最後乙個子字串包含剩下所有字元
public string[
]split
(string regex, int limit)
else
}// if no match was found, return this
if(off ==0)
return
newstring
;// add remaining segmentif(
!limited || list.
size()
< limit)
list.
add(
substring
(off, value.length));
// construct result
int resultsize = list.
size()
;// 當limit為0時 從最後乙個往前所有的空字串""全部被清空
if(limit ==0)
} string[
] result =
newstring
[resultsize]
;return list.
sublist(0
, resultsize)
.toarray
(result);}
// 通過正規表示式特俗處理,邏輯與上面邏輯基本類似
return pattern.
compile
(regex)
.split
(this
, limit)
;}
字串拼接,原始碼如下:
public string concat
(string str)
int len = value.length;
// 建立拼接以後字串長度的陣列,只有當前字串資料
char buf[
]= arrays.
copyof
(value, len + otherlen)
;// 將傳入的字串加入buf
str.
getchars
(buf, len)
;return
newstring
(buf,
true);
}
判斷是否包含某個字串,原理與indexof一致
public boolean contains
(charsequence s)
字串替換函式,oldchar要被替換的字元,newchar替換後的字元
public string replace
(char oldchar, char newchar)}if
(i < len)
while
(i < len)
return
newstring
(buf,
true);
}}return
this
;}
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...
String原始碼解析
string類被final修飾詞修飾,代表不可修改的特性,它實現了三個介面,serializable是序列化介面,compareble是排序介面,char是字串行介面。public final class string implements serializable,comparable,chars...
JDK原始碼解析 ThreadLocal
說明 本文是jdk 1.8版本 1.簡介 threadlocal 又叫做執行緒本地變數,也被稱為執行緒本地儲存。threadlocal 為 變數 在每乙個執行緒中建立 乙個 副本 不是原來變數的引用 每乙個執行緒都會獨自擁有變數副本,而不會相互影響。2.實現方式 1 set 方法,因為執行緒thre...