String類常識
后面的部分栗子基于這三個對象
String str1 = "You know, that's very funny!";
String str2 = "From Now On, I Will learn Java hardly,you know, That's must be!";
char[] fromChar = {'a', 'b', 'c'};
- 字符串的常量池:程序中直接用雙引號的字符串毅否,存放在字符串常量池中的,下面的same1署照,same2指向的地址一樣功戚,單例模式
String same1 = "abc";
String same2 = "abc";
String isSame = new String(fromChar);
System.out.println(same1 == same2); // true
System.out.println("缨该?" + same1 == isSame); // false
01-字符串的常量池.png
- @構(gòu)造方法
// 1.空內(nèi)容
String newStr1 = new String();
// 2.傳入一個字符數(shù)組
String newStr2 = new String(fromChar);
// 3.傳入一個字節(jié)數(shù)組
byte[] byteChars = {45, 23, 15, 67, 76, 45, 99};
String newStr3 = new String(byteChars);
// 4.直接創(chuàng)建
String newStr = "newStr";
- 創(chuàng)建格式化字符串 靜態(tài)方法, 下面的語句執(zhí)行效果一致
- %nd :整型占位符,n代表總的占位(默認(rèn)左邊補上空格,右對齊别凤,加上-號表示右對齊饰序;當(dāng)長度超過n,這個占位符將失去作用);
- %n.mf : 浮點數(shù)占位符,n代表總的占位數(shù)闻妓,m代表小數(shù)占位數(shù)(同上);
- %ns : 字符串占位數(shù)(同上)菌羽。
System.out.printf("int: %-5d\ndouble:%6.2f\nString:%10s",34,67.88,"hello men\n");
String fs = String.format("int :%10d\ndouble:%10.2f\nString:%10s",123,123.44234,"String");
- 制表符\t,比如打印九九乘法表,末尾加上\t會自動右對齊
一注祖、比較相關(guān)的方法
- 比較內(nèi)容是否全部相等,推薦:如果一個常量和對象進行比較建議 常量.equals(對象);原因:避免對象出現(xiàn)空指針異常(當(dāng)對象出現(xiàn)指向為null)
boolean eq1 = "abc".equals(str2);
boolean eq2 = str1.equals(str2);
- 比較內(nèi)容是否相等猾蒂,忽略大小寫,注意是晨,只有英文支持大小寫
boolean eq3 = str1.equalsIgnoreCase(str2);
- 比較大小肚菠,返回int類型的值,按照字典序進行比較,如果索引相同,如果有下一個索引繼續(xù)比較(ascii值的大小)
String a = "ab";
String b = "aC";
int a1 = a.compareTo(b);
System.out.println(a1); // 31
- 判斷是否已啥開頭(結(jié)尾)
boolean end0 = "abc123ttr".startsWith("abc");
// 判斷指定位置是否已啥開始
boolean end00 = "abc123ttr".startsWith("123", 3);
// 判斷是否以此后綴結(jié)束
boolean end = "abc123ttr".endsWith("ttr");
- 判斷是否符合正則表達(dá)式
boolean reg = "abc123".matches("\[abc\]{3}\[0-9\]*");
System.out.println("正則表達(dá)式判斷:" + reg); // true
二罩缴、獲取功能相關(guān)的方法
- 獲取字符串長度
int len2 = "abc".length();
- 返回索引處的char值
char char1 = str1.charAt(5);
- 連接兩個字符串
String con = str1.concat(str2);
- 通過 + 連接兩個字符串
String str3 = str1 + str2;
- 獲取一個子串(字符)第一次出現(xiàn)的索引位置
int index = "abc".indexOf('b');
int index2 = "abc".indexOf("bc");
- 獲取一個子串(字符)從索引位置開始第一次出現(xiàn)的索引位置
int index3 = "abcbc".indexOf('b', 2);
int index4 = "abcbc".indexOf("bc", 2);
- 獲取一個子串(字符)最后一次出現(xiàn)的索引位置
int index5 = "abc".lastIndexOf('b');
int index6 = "abc".lastIndexOf("bc");
- 獲取一個子串(字符)最后一次出現(xiàn)的索引位置蚊逢,從指定的索引位置開始反向搜索
int index7 = "abcbc".lastIndexOf('b', 2);
int index8 = "abcbc".lastIndexOf("bc", 2);
三、轉(zhuǎn)換功能相關(guān)的方法
- 拆分為字符數(shù)組
char[] charArr = "abc123".toCharArray();
- 返回平臺默認(rèn)編碼對應(yīng)的bytes數(shù)組
byte[] by = "abc".getBytes();
for(byte bb: by)
System.out.println("bb-> "+bb);
- 將所有子串轉(zhuǎn)換為另一個子串(或者字符箫章,但是得保證兩個參數(shù)類型一直)
String re = "abc***1234**".replace("**", "@");
System.out.println("替換:" + re);
- 正則表達(dá)式匹配替換(正則表達(dá)式底層的算法與編譯器實現(xiàn)的算法有異曲同工之妙)
String res = "abc123&&&&&&&jkhh&&&&".replaceAll("&+", "@");
System.out.println("正則表達(dá)式全部匹配替換:" + res);
- 正則表達(dá)式匹配替換第一個滿足條件的子串
String res2 = "abc12232&^*(&%$#%8673%%&.".replaceFirst("[0-9]+", "替換了");
System.out.println("正則表達(dá)式匹配第一次" + res2);
四烙荷、分割功能的方法
- 從索引位置開始截取字符串
String sub1 = "abcd123456".substring(4);
- 截取一個區(qū)間的字符串,包左不包右(如果參數(shù)一樣集檬寂,截取的為"")
String sub2 = "abc123456".substring(4,5);
System.out.println(sub2);
- 正則表達(dá)式進行拆分字符串
String regs0 = "黃老邪kdfje834-a8d歐陽鋒ldfjda8d7f983*^%%!段智興fkfasd)((000((洪七公+_++87787655王重陽";
String[] regs1 = regs0.split("[a-zA-Z0-9!@#$%^&*()_+-]+");
- 正則表達(dá)式分割终抽,限制分割次數(shù)
String[] regs2 = regs0.split("[a-zA-Z0-9!@#$%^&*()_+-]+", 2);
- 小寫轉(zhuǎn)換,(可以傳入指定規(guī)則 Locale 的實例)
String cha0 = "abc876ABHGd".toLowerCase();
- 大寫轉(zhuǎn)換桶至,(可以傳入指定規(guī)則 Locale 的實例)
String cha1 = "abc876ABHGd".toUpperCase();
-- 返回字符串的副本昼伴,忽略前導(dǎo)空白和尾部空白
String noSpace = " a bc d ".trim();
System.out.println(noSpace);