將字符串轉換為字符串數組
一、概述
String
可能是 Java 中最常用的類型之一。
在本教程中,我們將探討如何將String
轉換為String
數組 ( String[]
)。
2. 問題介紹
將字符串轉換為字符串數組可能有兩種情況:
- 將字符串轉換為單例數組(只有一個元素的數組)
- 按照特定規則將字符串分解為數組的元素
案例 1 比較容易理解。例如,如果我們有一個字符串“baeldung”
,我們希望將其轉換為String[]{ “baeldung” }
。換句話說,轉換後的數組只有一個元素,即輸入字符串本身。
對於情況 2,我們需要將輸入字符串分成幾部分。但是,結果應該如何完全取決於需求。例如,如果我們期望最終數組中的每個元素都包含輸入字符串中的兩個相鄰字符,給定“baeldung”,
我們將有String[]{ “ba”, “el”, “du”, “ng” }.
稍後,我們將看到更多示例。
在本教程中,我們將把這個字符串作為輸入:
String INPUT = "Hi there, nice to meet you!";
當然,我們將涵蓋這兩種轉換場景。此外,為簡單起見,我們將使用單元測試斷言來驗證我們的解決方案是否按預期工作。
3. 轉換為單例數組
由於輸入字符串將是目標數組中的唯一元素,我們可以簡單地使用輸入字符串初始化數組來解決問題:
String[] myArray = new String[] { INPUT };
assertArrayEquals(new String[] { "Hi there, nice to meet you!" }, myArray);
然後,如果我們運行測試,它就會通過。
4. 將輸入字符串轉換為數組中的元素
現在,讓我們看看如何將輸入字符串分成段。
4.1。使用String
的split()
方法
我們經常需要以特定模式處理輸入字符串。在這種情況下,我們可以使用正則表達式或正則表達式將輸入分解為String
數組。 Java 的String
類提供了split()
方法來完成這項工作。
接下來,我們將根據幾個不同的要求將輸入示例拆分為一個數組。
首先,假設我們要將輸入句子拆分為子句數組。為了解決這個問題,我們可以用標點符號分割輸入字符串:
String[] myArray = INPUT.split("[-,.!;?]\\s*" );
assertArrayEquals(new String[] { "Hi there", "nice to meet you" }, myArray);
值得一提的是,當我們需要一個正則表達式的字符類來包含一個破折號時,我們可以把它放在最開始。
上面的測試表明輸入字符串在一個數組中被分成兩個子句。
接下來,讓我們將同一輸入字符串中的所有單詞提取到單詞數組中。這也是我們在現實世界中可能面臨的普遍問題。
要獲取單詞數組,我們可以將輸入拆分為非單詞字符( \W+
):
String[] myArray = INPUT.split("\\W+");
assertArrayEquals(new String[] { "Hi", "there", "nice", "to", "meet", "you" }, myArray);
最後,讓我們將輸入字符串分解為字符:
String[] myArray = INPUT.split("");
assertArrayEquals(new String[] {
"H", "i", " ", "t", "h", "e", "r", "e", ",", " ",
"n", "i", "c", "e", " ", "t", "o", " ", "m", "e", "e", "t", " ", "y", "o", "u", "!"
}, myArray);
如上面的代碼所示,我們使用一個空字符串(零寬度)作為正則表達式。每個字符,包括輸入字符串中的空格,都被提取為目標數組的一個元素。
我們應該注意**String.toCharArray()
也將輸入轉換為數組。但是,目標數組是char
數組 ( char[]
) 而不是String
數組 ( String[]
)** 。
這三個示例使用String.split()
方法將輸入字符串轉換為不同的字符串數組。一些流行的庫,例如 Guava 和 Apache Commons,也提供了增強的字符串拆分功能。我們已經在另一篇文章中詳細討論過。
此外,我們還有許多其他文章來討論如何解決不同的具體分裂問題。
4.2.特殊解析要求
有時我們必須遵循特定規則來拆分輸入。一個例子可以很快地闡明它。假設我們有這個輸入字符串:
String FLIGHT_INPUT = "20221018LH720FRAPEK";
我們期望得到這個數組作為結果:
{ "20221018", "LH720", "FRA", "PEK" }
好吧,乍一看,這個轉換邏輯看起來很模糊。但是,如果我們列出輸入字符串的定義,我們就會明白為什麼上面的數組是預期的:
[date][Flight number][Airport from][Airport to]
- date: YYYY-MM-DD; length:8
- Flight number; length: variable
- Airport From: IATA airport code, length:3
- Airport To: IATA airport code, length:3
正如我們所看到的,有時我們需要按照一個非常特殊的規則來解析輸入字符串。在這種情況下,我們需要分析需求並實現解析器:
String dateStr = FLIGHT_INPUT.substring(0, 8);
String flightNo = FLIGHT_INPUT.substring(8, FLIGHT_INPUT.length() - 6);
int airportStart = dateStr.length() + flightNo.length();
String from = FLIGHT_INPUT.substring(airportStart, airportStart + 3);
String to = FLIGHT_INPUT.substring(airportStart + 3);
String[] myArray = new String[] { dateStr, flightNo, from, to };
assertArrayEquals(new String[] { "20221018", "LH720", "FRA", "PEK" }, myArray);
如上面的代碼所示,我們使用substring()
方法構建了解析器並正確處理了航班輸入。
5. 結論
在本文中,我們學習瞭如何在 Java 中將String
轉換為String
數組。
簡而言之,將字符串轉換為單例數組非常簡單。如果我們需要將給定的字符串分成段,我們可以使用String.split()
方法。但是,如果我們需要按照特定規則來分解輸入,我們可能需要仔細分析輸入格式並實現解析器來解決問題。
與往常一樣,本文中使用的完整代碼可在 GitHub 上獲得。