“阿米戈,你怎麼看?繼 int 之後最受歡迎的 Java 類是什麼?”

“你已經在課程的標題中給了我劇透,艾莉。是String!”

“的確,它是一個劇透。String絕對是無處不在。它有一堆有用的方法,你最好知道。

“該類String是除原始類型之外唯一可以在語句中使用其文字的類switch;編譯器以特殊方式處理字符串加法和 String 對象;對像String以特殊方式存儲在內存中。基本上,該類String是一個非常特別班。

“此外,該String課程還有一堆輔助類,其目的是進一步簡化 Java 中的字符串處理。當你學會所有這些後,很多事情對你來說真的會變得容易得多。”

“我等不及了。”

”好吧,我們就從這個生態系統的核心——類的組織開始String。類的結構String其實很簡單:裡面是一個字符數組chararray),裡面存儲了字符串的所有字符。對於例如,這是單詞“Hello”的存儲方式:

String類的結構

這一點很重要。

其實,這並不完全準確。因為這個String類非常重要,它使用了很多優化,並且數據在內部存儲的不是字符數組,而是簡單的字節數組。

String 類的方法

該類String有很多方法:僅它就有 18 個構造函數!所以,下面我將只列出最常用的:

方法 描述
int length()
返回字符串中的字符數
boolean isEmpty()
檢查字符串是否為空字符串
boolean isBlank()
檢查字符串是否僅包含空白字符:空格、製表符、換行符等。
char charAt(int index)
返回字符串中索引位置的字符。
char[] toCharArray()
返回組成字符串的字符數組(副本)
byte[] getBytes()
將字符串轉換為一組字節並返回字節數組。
String[] split(String regex)
將字符串拆分為多個子字符串。
String join(CharSequence delimiter, elements)
將多個子字符串連接在一起
String intern()
將字符串放入字符串池。

“這看起來很不錯!”

“讓我們編寫一個程序,將文件路徑從 Unix 風格轉換為 Windows 風格。Unix 使用字符/分隔文件夾,而 Windows 使用字符\

解決方案 1.使用char數組

代碼 筆記
Scanner console = new Scanner(System.in);
String path = console.nextLine();

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
創建一個 Scanner 對象
從控制台讀取一行

將字符串轉換為字符數組
在字符上循環
如果字符是/
則將其替換為\. 不要忘記逃跑。

根據字符數組創建一個新字符串。
顯示字符串。

解決方案 2.使用split()join()方法:

代碼 筆記
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String array[] = path.split("\\/");


String result = String.join("\\", array);


System.out.println(result);
創建一個 Scanner 對象
從控制台讀取一行

Convert string to array of strings。該/字符用作分隔符(額外的兩個斜杠是雙重轉義的結果)。連接字符串數組
中的所有字符串。用作分隔符(我們看到它轉義了)。 顯示字符串。\

解決方案三、使用replace(char oldChar, char newChar)方法:

代碼 筆記
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String result = path.replace('/', '\\');

System.out.println(result);
創建一個 Scanner 對象
從控制台讀取一行

只需將一個字符替換為另一個字符
(第二個字符被轉義)
顯示字符串。

“我最喜歡第三種解決方案。但我會同時練習這三種方法。”

“幹得好,阿米戈,我看你已經迫不及待想要將新知識付諸實踐了,課程結束了。”