不可變String
String對象不可變妇穴,每一次“+”都會產(chǎn)生一個新的String對象犬性,同時,變更的只是引用碎浇。
對比:空字符串和null
對比 空字符串 null 區(qū)別 在堆內(nèi)存中存在疗我,有內(nèi)存空間,但沒有內(nèi)容 在堆內(nèi)存中不存在南捂,無法調(diào)用方法
重載“+”與StringBuilder
在使用“+”時吴裤,會調(diào)用StringBuilder來進(jìn)行連接。
StringBuilder result = new StringBuilder();
for (int i = 0; i < values.length; i ++) {
result.append(values[i]);
}
對比:String溺健、StringBuilder麦牺、StringBuffer
類 String(“+”) StringBuilder StringBuffer 區(qū)別 只讀钮蛛,不可變 可寫,單線程環(huán)境下使用剖膳,效率更高 可寫魏颓,多線程被synchronized修飾,線程安全 使用場景 少量字符串 頻繁吱晒、大量甸饱,局部變量,單線程仑濒,不涉及線程安全 全局變量叹话,多線程支持
正則表達(dá)式
String類中使用到正則表達(dá)式的方法有:
matches、replaceAll墩瞳、replaceFirst驼壶、split。
對比:replaceAll喉酌、replaceFirst热凹、replace
方法 replaceAll replaceFirst replace 區(qū)別 正則表達(dá)式 正則表達(dá)式 普通參數(shù) 功能 替換全部匹配值 替換第一個匹配值 替換所有相同參數(shù)
常用元字符 | 功能 |
---|---|
. | 匹配除換行符以外的任意字符 |
\w | 匹配字母、數(shù)字或下劃線 |
\s | 匹配空白符 |
\S | 匹配非空白符 |
\d | 匹配數(shù)字 |
\D | 匹配非數(shù)字 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結(jié)束 |
常用限定符 | 功能 |
---|---|
* | 重復(fù)0次或多次 |
+ | 重復(fù)1次或多次 |
泪电? | 重復(fù)0次或1次 |
{n} | 重復(fù)n次 |
{n,} | 重復(fù)n次或更多次 |
{n,m} | 重復(fù)n到m次 |
注1:若查詢元字符或限定符本身般妙,需使用轉(zhuǎn)義字符“\”。
注2:“[]”表示匹配其中的任何一個即可相速;“|”表示兩種不同規(guī)則進(jìn)行匹配
正則表達(dá)式的一般用法
import java.util.regex; //引入包
Pattern p=Pattern.compile(regex); //regex:正則表達(dá)式
Matcher m=p.matcher(string); //string:匹配字符串
m.matches(); //return boolean
(參考資料:Pattern)
量詞:匹配模式
匹配模式 | 貪婪型 | 勉強(qiáng)型 | 占有型 |
---|---|---|---|
功能 | 最大匹配碟渺,匹配多次直到最大匹配 | 最小匹配,盡可能少 | 完全匹配和蚪,只執(zhí)行一次 |