Java—API/Obiect類的equals toString方法/String類/StringBuffer類/正則表示式
API
Java 的API(API: Application(應用) Programming(程式) Interface(介面)) 就是JDK中提供給我們使用的類,這些類將底層的程式碼實現封裝了起來
Object類
Object類是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。所有類在建立物件的時候,最終找的父類就是Object。
equals方法
equals方法,用於比較兩個物件是否相同,它其實就是使用兩個物件的記憶體地址在比較。Object類中的equals方法內部使用的就是==比較運算子。
例如:
/* 描述人這個類,並定義功能根據年齡判斷是否是同齡人 由於要根據指定類的屬性進行比較,這時只要覆蓋Object中的equals方法 在方法體中根據類的屬性值進行比較*/ class Person extends Object{ int age ; //複寫父類的equals方法,實現自己的比較方式 public boolean equals(Object obj) { //判斷當前呼叫equals方法的物件和傳遞進來的物件是否是同一個 if(this == obj){ return true; } //判斷傳遞進來的物件是否是Person型別 if(!(obj instanceof Person)){ return false; } //將obj向下轉型為Perosn引用,訪問其屬性 Person p = (Person)obj; return this.age == p.age; } }
注意:在複寫Object中的equals方法時,一定要注意public boolean equals(Object obj)的引數是Object型別,在呼叫物件的屬性時,一定要進行型別轉換,在轉換之前必須進行型別判斷。
toString方法
toString方法返回該物件的字串表示,其實該字串內容就是物件的型別+@+記憶體地址值。
由於toString方法返回的結果是記憶體地址,而在開發中,經常需要按照物件的屬性得到相應的字串表現形式,因此也需要重寫它。
class Person extends Object{ int age ; //根據Person類的屬性重寫toString方法 public String toString() { return "Person [age=" + age + "]"; } }
String類
//演示字串 String str = "oracle"; str = "甲骨文";
String 類代表字串,而字串是常量,它們的值在建立之後不能更改,一旦這個字串確定了,那麼就會在記憶體區域中就生成了這個字串。字串本身不能改變,但str變數中記錄的地址值是可以改變的。
字串的本質是一個字元的陣列。
通過使用雙引號的方式建立物件與new的方式建立物件,有什麼不同呢?
String s3 = "abc"; String s4 = new String("abc"); System.out.println(s3==s4);//false ==比較地址值 System.out.println(s3.equals(s4));//true, equals比較屬性值 //因為String重寫了equals方法,建立了字串自己的判斷相同的依據(通過字串物件中的字元來判斷)
s3建立,在記憶體中只有一個物件。這個物件在字串常量池中
s4建立,在記憶體中有兩個物件。一個new的物件在堆中,一個字串本身物件,在字串常量池中
String類構造方法
String s1 = new String(); //建立String物件,字串中沒有內容 byte[] bys = new byte[]{97,98,99,100}; String s2 = new String(bys); // 建立String物件,把陣列元素作為字串的內容 String s3 = new String(bys, 1, 3); //建立String物件,把一部分陣列元素作為字串的內容,引數offset為陣列元素的起始索引位置,引數length為要幾個元素 char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’}; String s4 = new String(chs); //建立String物件,把陣列元素作為字串的內容 String s5 = new String(chs, 0, 3);//建立String物件,把一部分陣列元素作為字串的內容,引數offset為陣列元素的起始索引位置,引數count為要幾個元素 String s6 = new String(“abc”); //建立String物件,字串內容為abc
String方法
char |
charAt(intindex) 返回指定索引處的 char 值。 |
int |
codePointAt(intindex)
返回指定索引處的字元(Unicode 程式碼點)。 |
int |
codePointBefore(intindex)
返回指定索引之前的字元(Unicode 程式碼點)。 |
int |
codePointCount(intbeginIndex,
intendIndex) 返回此 String 的指定文字範圍中的 Unicode
程式碼點數。 |
int |
compareTo(StringanotherString)
按字典順序比較兩個字串。 |
int |
compareToIgnoreCase(Stringstr)
按字典順序比較兩個字串,不考慮大小寫。 |
String |
concat(Stringstr)
將指定字串連線到此字串的結尾。 |
boolean |
contains(CharSequences)
當且僅當此字串包含指定的 char 值序列時,返回 true。 |
boolean |
contentEquals(CharSequencecs)
將此字串與指定的 CharSequence 比較。 |
boolean |
contentEquals(StringBuffersb)
將此字串與指定的 StringBuffer 比較。 |
staticString |
copyValueOf(char[]data)
返回指定陣列中表示該字元序列的 String。 |
staticString |
copyValueOf(char[]data,
intoffset, intcount) 返回指定陣列中表示該字元序列的 String。 |
boolean |
endsWith(Stringsuffix)
測試此字串是否以指定的字尾結束。 |
boolean |
equals(ObjectanObject)
將此字串與指定的物件比較。 |
boolean |
equalsIgnoreCase(StringanotherString)
將此 String 與另一個 String
比較,不考慮大小寫。 |
staticString |
format(Localel, Stringformat, Object...args)
使用指定的語言環境、格式字串和引數返回一個格式化字串。 |
staticString |
format(Stringformat, Object...args)
使用指定的格式字串和引數返回一個格式化字串。 |
byte[] |
getBytes()
使用平臺的預設字符集將此 String 編碼為 byte 序列,並將結果儲存到一個新的 byte
陣列中。 |
byte[] |
getBytes(Charsetcharset)
使用給定的 charset 將此 String
編碼到 byte 序列,並將結果儲存到新的 byte 陣列。 |
void |
getBytes(intsrcBegin,
intsrcEnd, byte[]dst, intdstBegin)
已過時。該方法無法將字元正確轉換為位元組。從 JDK 1.1 起,完成該轉換的首選方法是通過 getBytes()
方法,該方法使用平臺的預設字符集。 |
byte[] |
getBytes(StringcharsetName)
使用指定的字符集將此 String 編碼為 byte 序列,並將結果儲存到一個新的 byte
陣列中。 |
void |
getChars(intsrcBegin,
intsrcEnd, char[]dst, intdstBegin)
將字元從此字串複製到目標字元陣列。 |
int |
hashCode()
返回此字串的雜湊碼。 |
int |
indexOf(intch)
返回指定字元在此字串中第一次出現處的索引。 |
int |
indexOf(intch,
intfromIndex) 返回在此字串中第一次出現指定字元處的索引,從指定的索引開始搜尋。 |
int |
indexOf(Stringstr)
返回指定子字串在此字串中第一次出現處的索引。 |
int |
indexOf(Stringstr,
intfromIndex) 返回指定子字串在此字串中第一次出現處的索引,從指定的索引開始。 |
String |
intern()
返回字串物件的規範化表示形式。 |
boolean |
isEmpty()
當且僅當 length() 為
0 時返回 true。 |
int |
lastIndexOf(intch)
返回指定字元在此字串中最後一次出現處的索引。 |
int |
lastIndexOf(intch,
intfromIndex)
返回指定字元在此字串中最後一次出現處的索引,從指定的索引處開始進行反向搜尋。 |
int |
lastIndexOf(Stringstr)
返回指定子字串在此字串中最右邊出現處的索引。 |
int |
lastIndexOf(Stringstr,
intfromIndex)
返回指定子字串在此字串中最後一次出現處的索引,從指定的索引開始反向搜尋。 |
int |
length()
返回此字串的長度。 |
boolean |
matches(Stringregex)
告知此字串是否匹配給定的正則表示式。 |
int |
offsetByCodePoints(intindex,
intcodePointOffset) 返回此 String 中從給定的
index 處偏移 codePointOffset 個程式碼點的索引。 |
boolean |
regionMatches(booleanignoreCase,
inttoffset, Stringother, intooffset,
intlen) 測試兩個字串區域是否相等。 |
boolean |
regionMatches(inttoffset,
Stringother,
intooffset, intlen) 測試兩個字串區域是否相等。 |
String |
replace(charoldChar,
charnewChar) 返回一個新的字串,它是通過用 newChar
替換此字串中出現的所有 oldChar 得到的。 |
String |
replace(CharSequencetarget, CharSequencereplacement)
使用指定的字面值替換序列替換此字串所有匹配字面值目標序列的子字串。 |
String |
replaceAll(Stringregex, Stringreplacement)
使用給定的 replacement 替換此字串所有匹配給定的正則表示式的子字串。 |
String |
replaceFirst(Stringregex, Stringreplacement)
使用給定的 replacement 替換此字串匹配給定的正則表示式的第一個子字串。 |
String[] |
split(Stringregex) 根據給定正則表示式的匹配拆分此字串。 |
String[] |
split(Stringregex,
intlimit) 根據匹配給定的正則表示式來拆分此字串。 |
boolean |
startsWith(Stringprefix)
測試此字串是否以指定的字首開始。 |
boolean |
startsWith(Stringprefix,
inttoffset) 測試此字串從指定索引開始的子字串是否以指定字首開始。 |
CharSequence |
subSequence(intbeginIndex,
intendIndex) 返回一個新的字元序列,它是此序列的一個子序列。 |
String |
substring(intbeginIndex)
返回一個新的字串,它是此字串的一個子字串。 |
String |
substring(intbeginIndex,
intendIndex) 返回一個新字串,它是此字串的一個子字串。 |
char[] |
toCharArray()
將此字串轉換為一個新的字元陣列。 |
String |
toLowerCase()
使用預設語言環境的規則將此 String 中的所有字元都轉換為小寫。 |
String |
toLowerCase(Localelocale) 使用給定 Locale 的規則將此 String 中的所有字元都轉換為小寫。 |
String |
toString()
返回此物件本身(它已經是一個字串!)。 |
String |
toUpperCase()
使用預設語言環境的規則將此 String 中的所有字元都轉換為大寫。 |
String |
toUpperCase(Localelocale) 使用給定 Locale 的規則將此 String 中的所有字元都轉換為大寫。 |
String |
trim()
返回字串的副本,忽略前導空白和尾部空白。 |
staticString |
valueOf(booleanb)
返回 boolean 引數的字串表示形式。 |
staticString |
valueOf(charc)
返回 char 引數的字串表示形式。 |
staticString |
valueOf(char[]data)
返回 char 陣列引數的字串表示形式。 |
staticString |
valueOf(char[]data,
intoffset, intcount) 返回 char
陣列引數的特定子陣列的字串表示形式。 |
staticString |
valueOf(doubled)
返回 double 引數的字串表示形式。 |
staticString |
valueOf(floatf)
返回 float 引數的字串表示形式。 |
staticString |
valueOf(inti)
返回 int 引數的字串表示形式。 |
staticString |
valueOf(longl)
返回 long 引數的字串表示形式。 |
staticString |
valueOf(Objectobj)
返回 Object 引數的字串表示形式。 |
StringBuffer類
StringBuffer又稱為可變字元序列,它是一個類似於 String 的字串緩衝區,通過某些方法呼叫可以改變該序列的長度和內容。
StringBuffer的方法
StringBuffer |
append(booleanb) 將 boolean 引數的字串表示形式追加到序列。 |
StringBuffer |
append(charc)
將 char 引數的字串表示形式追加到此序列。 |
StringBuffer |
append(char[]str)
將 char 陣列引數的字串表示形式追加到此序列。 |
StringBuffer |
append(char[]str,
intoffset, intlen) 將 char
陣列引數的子陣列的字串表示形式追加到此序列。 |
StringBuffer |
append(CharSequences)
將指定的 CharSequence 追加到該序列。 |
StringBuffer |
append(CharSequences, intstart,
intend) 將指定 CharSequence
的子序列追加到此序列。 |
StringBuffer |
append(doubled)
將 double 引數的字串表示形式追加到此序列。 |
StringBuffer |
append(floatf)
將 float 引數的字串表示形式追加到此序列。 |
StringBuffer |
append(inti)
將 int 引數的字串表示形式追加到此序列。 |
StringBuffer |
append(longlng)
將 long 引數的字串表示形式追加到此序列。 |
StringBuffer |
append(Objectobj)
追加 Object 引數的字串表示形式。 |
StringBuffer |
append(Stringstr)
將指定的字串追加到此字元序列。 |
StringBuffer |
append(StringBuffersb)
將指定的 StringBuffer 追加到此序列中。 |
StringBuffer |
appendCodePoint(intcodePoint)
將 codePoint 引數的字串表示形式追加到此序列。 |
int |
capacity()
返回當前容量。 |
char |
charAt(intindex)
返回此序列中指定索引處的 char 值。 |
int |
codePointAt(intindex)
返回指定索引處的字元(統一程式碼點)。 |
int |
codePointBefore(intindex)
返回指定索引前的字元(統一程式碼點)。 |
int |
codePointCount(intbeginIndex,
intendIndex) 返回此序列指定文字範圍內的統一程式碼點。 |
StringBuffer |
delete(intstart,
intend) 移除此序列的子字串中的字元。 |
StringBuffer |
deleteCharAt(intindex)
移除此序列指定位置的 char 。 |
void |
ensureCapacity(intminimumCapacity)
確保容量至少等於指定的最小值。 |
void |
getChars(intsrcBegin,
intsrcEnd, char[]dst, intdstBegin) 將字元從此序列複製到目標字元陣列 dst 。 |
int |
indexOf(Stringstr)
返回第一次出現的指定子字串在該字串中的索引。 |
int |
indexOf(Stringstr,
intfromIndex) 從指定的索引處開始,返回第一次出現的指定子字串在該字串中的索引。 |
StringBuffer |
insert(intoffset,
booleanb) 將 boolean
引數的字串表示形式插入此序列中。 |
StringBuffer |
insert(intoffset,
charc) 將 char 引數的字串表示形式插入此序列中。 |
StringBuffer |
insert(intoffset,
char[]str) 將 char
陣列引數的字串表示形式插入此序列中。 |
StringBuffer |
insert(intindex,
char[]str, intoffset, intlen) 將陣列引數 str
的子陣列的字串表示形式插入此序列中。 |
StringBuffer |
insert(intdstOffset,
CharSequences)
將指定 CharSequence 插入此序列中。 |
StringBuffer |
insert(intdstOffset,
CharSequences, intstart,
intend) 將指定 CharSequence
的子序列插入此序列中。 |
StringBuffer |
insert(intoffset,
doubled) 將 double 引數的字串表示形式插入此序列中。 |
StringBuffer |
insert(intoffset,
floatf) 將 float 引數的字串表示形式插入此序列中。 |
StringBuffer |
insert(intoffset,
inti) 將 int 引數的字串表示形式插入此序列中。 |
StringBuffer |
insert(intoffset,
longl) 將 long 引數的字串表示形式插入此序列中。 |
StringBuffer |
insert(intoffset,
Objectobj) 將 Object 引數的字串表示形式插入此字元序列中。 |
StringBuffer |
insert(intoffset,
Stringstr)
將字串插入此字元序列中。 |
int |
lastIndexOf(Stringstr)
返回最右邊出現的指定子字串在此字串中的索引。 |
int |
lastIndexOf(Stringstr,
intfromIndex) 返回最後一次出現的指定子字串在此字串中的索引。 |
int |
length()
返回長度(字元數)。 |
int |
offsetByCodePoints(intindex,
intcodePointOffset) 返回此序列中的一個索引,該索引是從給定 index
偏移 codePointOffset 個程式碼點後得到的。 |
StringBuffer |
replace(intstart,
intend, Stringstr) 使用給定 String 中的字元替換此序列的子字串中的字元。 |
StringBuffer |
reverse()
將此字元序列用其反轉形式取代。 |
void |
setCharAt(intindex,
charch) 將給定索引處的字元設定為 ch 。 |
void |
setLength(intnewLength)
設定字元序列的長度。 |
CharSequence |
subSequence(intstart,
intend) 返回一個新的字元序列,該字元序列是此序列的子序列。 |
String |
substring(intstart)
返回一個新的 String ,它包含此字元序列當前所包含的字元子序列。 |
String |
substring(intstart,
intend) 返回一個新的 String ,它包含此序列當前所包含的字元子序列。 |
String |
toString()
返回此序列中資料的字串表示形式。 |
void |
trimToSize()
嘗試減少用於字元序列的儲存空間。 |
常用程式碼演示:
建立一個字串緩衝區物件。用於儲存資料。 StringBuffer sb = new StringBuffer(); sb.append("haha"); //新增字串 sb.insert(2, "it");//在指定位置插入 sb.delete(1, 4);//刪除 sb.replace(1, 4, "cast");//替換指定範圍內的內容 String str = sb.toString();
注意:append、delete、insert、replace、reverse方法呼叫後,返回值都是當前物件自己,所以說,StringBuffer它可以改變字元序列的長度和內容。
StringBuilder類
StringBuilder類,它也是一個可變的字元序列。此類提供一個與 StringBuffer 相容的 API,但不保證同步。
該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。
如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。
正則表示式
正則表示式(英語:Regular Expression,在程式碼中常簡寫為regex)。
正則表示式是一個字串,使用單個字元串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字串。
在開發中,正則表示式通常被用來檢索、替換那些符合某個規則的文字。Pattern
正則表示式的匹配規則
正則表示式中明確區分大小寫字母
正則表示式的語法規則:
字元:x
含義:代表的是字元x
例如:匹配規則為 "a\",那麼需要匹配的字串內容就是 ”a”
字元:\\
含義:代表的是反斜線字元'\'
例如:匹配規則為"\\" ,那麼需要匹配的字串內容就是 ”\”
字元:\t
含義:製表符
例如:匹配規則為"\t" ,那麼對應的效果就是產生一個製表符的空間
字元:\n
含義:換行符
例如:匹配規則為"\n",那麼對應的效果就是換行,游標在原有位置的下一行
字元:\r
含義:回車符
例如:匹配規則為"\r" ,那麼對應的效果就是回車後的效果,游標來到下一行行首
字元類:[abc]
含義:代表的是字元a、b 或 c
例如:匹配規則為"[abc]" ,那麼需要匹配的內容就是字元a,或者字元b,或字元c的一個
字元類:[^abc]
含義:代表的是除了 a、b 或 c以外的任何字元
例如:匹配規則為"[^abc]",那麼需要匹配的內容就是不是字元a,或者不是字元b,或不是字元c的任意一個字元
字元類:[a-zA-Z]
含義:代表的是a 到 z 或 A 到 Z,兩頭的字母包括在內
例如:匹配規則為"[a-zA-Z]",那麼需要匹配的是一個大寫或者小寫字母
字元類:[0-9]
含義:代表的是 0到9數字,兩頭的數字包括在內
例如:匹配規則為"[0-9]",那麼需要匹配的是一個數字
字元類:[a-zA-Z_0-9]
含義:代表的字母或者數字或者下劃線(即單詞字元)
例如:匹配規則為" [a-zA-Z_0-9] ",那麼需要匹配的是一個字母或者是一個數字或一個下滑線
預定義字元類:.
含義:代表的是任何字元
例如:匹配規則為" . ",那麼需要匹配的是一個任意字元。如果,就想使用 . 的話,使用匹配規則"\\."來實現[email protected]
預定義字元類:\d\D
含義:代表的是 0到9數字,兩頭的數字包括在內,相當於[0-9]
例如:匹配規則為"\d ",那麼需要匹配的是一個數字
預定義字元類:\w\W
含義:代表的字母或者數字或者下劃線(即單詞字元),相當於[a-zA-Z_0-9]
例如:匹配規則為"\w ",,那麼需要匹配的是一個字母或者是一個數字或一個下滑線
邊界匹配器:^
含義:代表的是行的開頭
例如:匹配規則為^[abc][0-9]$ ,那麼需要匹配的內容從[abc]這個位置開始, 相當於左雙引號
邊界匹配器:$
含義:代表的是行的結尾
例如:匹配規則為^[abc][0-9]$ ,那麼需要匹配的內容以[0-9]這個結束, 相當於右雙引號
邊界匹配器:\b
含義:代表的是單詞邊界
例如:匹配規則為"\b[abc]\b" ,那麼代表的是字母a或b或c的左右兩邊需要的是非單詞字元([a-zA-Z_0-9])
數量詞:X?
含義:代表的是X出現一次或一次也沒有
例如:匹配規則為"a?",那麼需要匹配的內容是一個字元a,或者一個a都沒有
數量詞:X*
含義:代表的是X出現零次或多次
例如:匹配規則為"a*" ,那麼需要匹配的內容是多個字元a,或者一個a都沒有
數量詞:X+
含義:代表的是X出現一次或多次
例如:匹配規則為"a+",那麼需要匹配的內容是多個字元a,或者一個a
數量詞:X{n}
含義:代表的是X出現恰好 n 次
例如:匹配規則為"a{5}",那麼需要匹配的內容是5個字元a
數量詞:X{n,}
含義:代表的是X出現至少 n 次
例如:匹配規則為"a{5, }",那麼需要匹配的內容是最少有5個字元a
數量詞:X{n,m}
含義:代表的是X出現至少 n 次,但是不超過 m 次
例如:匹配規則為"a{5,8}",那麼需要匹配的內容是有5個字元a 到 8個字元a之間