String
實(shí)際上字符串在String
內(nèi)部是通過一個(gè)char[]
數(shù)組表示的敏簿。因此得湘,按下面的寫法也是可以的:
String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'});
Java字符串的一個(gè)重要特點(diǎn)就是字符串不可變募狂。這種不可變性是通過內(nèi)部的private final char[]
字段,以及沒有任何修改char[]
的方法實(shí)現(xiàn)的诞帐。
字符串比較
Java編譯器在編譯期欣尼,會(huì)自動(dòng)把所有相同的字符串當(dāng)作一個(gè)對(duì)象放入常量,自然引用也是相同的停蕉。(所以愕鼓,使用==
有時(shí)候相等完全是巧合)。
兩個(gè)字符串比較慧起,必須總是使用equals()
方法菇晃。
要忽略大小寫比較,使用equalsIgnoreCase()
方法蚓挤。
搜索子串和提取子串
搜索子串的更多的例子:
"Hello".indexOf("l"); // 2
"Hello".lastIndexOf("l"); // 3
"Hello".startsWith("He"); // true
"Hello".endsWith("lo"); // true
提取子串的例子:
"Hello".substring(2); // "llo"
"Hello".substring(2, 4); "ll"
去除首尾空白字符
trim()
使用trim()
方法可以移除字符串首尾空白字符磺送。空白字符包括空格屈尼,\t
册着,\r
拴孤,\n
脾歧。
注意:trim()
并沒有改變字符串的內(nèi)容,而是返回了一個(gè)新字符串演熟。
" \tHello\r\n ".trim(); // "Hello"
strip()
另一個(gè)strip()
方法也可以移除字符串首尾空白字符鞭执。它和trim()
不同的是,類似中文的空格字符\u3000
也會(huì)被移除.
"\u3000Hello\u3000".strip(); // "Hello"
" Hello ".stripLeading(); // "Hello "
" Hello ".stripTrailing(); // " Hello"
判斷字符串空和空白字符串
isEmpty()
和isBlank()
來判斷字符串是否為空和空白字符串芒粹。
"".isEmpty(); // true兄纺,因?yàn)樽址L(zhǎng)度為0
" ".isEmpty(); // false,因?yàn)樽址L(zhǎng)度不為0
" \n".isBlank(); // true化漆,因?yàn)橹话瞻鬃址?" Hello ".isBlank(); // false估脆,因?yàn)榘强瞻鬃址?
替換子串
-
一種是根據(jù)字符或字符串替換:
String s = "hello"; s.replace('l', 'w'); // "hewwo",所有字符'l'被替換為'w' s.replace("ll", "~~"); // "he~~o"座云,所有子串"ll"被替換為"~~"
-
另一種是通過正則表達(dá)式替換:
String s = "A,,B;C ,D"; s.replaceAll("[\\,\\;\\s]+", ","); // "A,B,C,D"
分割字符串
要分割字符串疙赠,使用split()
方法,并且傳入的也是正則表達(dá)式.
String s = "A,B,C,D";
String[] ss = s.split("\\,"); // {"A", "B", "C", "D"}
拼接字符串
拼接字符串使用靜態(tài)方法join()
朦拖,它用指定的字符串連接字符串?dāng)?shù)組:
String[] arr = {"A", "B", "C"};
String s = String.join("***", arr); // "A***B***C"
類型轉(zhuǎn)換
要把任意基本類型或引用類型轉(zhuǎn)換為字符串圃阳,可以使用靜態(tài)方法valueOf()
。這是一個(gè)重載方法璧帝,編譯器會(huì)根據(jù)參數(shù)自動(dòng)選擇合適的方法:
String.valueOf(123); // "123"
String.valueOf(45.67); // "45.67"
String.valueOf(true); // "true"
String.valueOf(new Object()); // 類似java.lang.Object@636be97c
要把字符串轉(zhuǎn)換為其他類型捍岳,就需要根據(jù)情況。
-
字符串轉(zhuǎn)換為
int
類型int n1 = Integer.parseInt("123"); // 123 int n2 = Integer.parseInt("ff", 16); // 按十六進(jìn)制轉(zhuǎn)換,255
-
字符串轉(zhuǎn)換為
boolean
類型boolean b1 = Boolean.parseBoolean("true"); // true boolean b2 = Boolean.parseBoolean("FALSE"); // false
-
String
和char[]
類型可以互相轉(zhuǎn)換char[] cs = "Hello".toCharArray(); // String -> char[] String s = new String(cs); // char[] -> String