將 Java 字串拆分為鍵值對
一、簡介
處理以 CSV(逗號分隔值)或自訂分隔資料等格式儲存的資料通常需要將字串拆分為 Java 中的鍵值對。在本教程中,我們將藉助程式碼範例和說明探索如何將 Java 文字拆分為鍵值對。
2.使用StringTokenizer
StringTokenizer
類別使我們能夠根據提供的分隔符號將字串分解為標記,是將字串拆分為鍵值對的一種方法。
讓我們舉個例子:
@Test
public void givenStringData_whenUsingTokenizer_thenTokenizeAndValidate() {
String data = "name=John age=30 city=NewYork";
StringTokenizer tokenizer = new StringTokenizer(data);
// Create a map to store key-value pairs
Map<String, String> keyValueMap = new HashMap<>();
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
String[] keyValue = token.split("=");
if (keyValue.length == 2) {
String key = keyValue[0];
String value = keyValue[1];
// Store key-value pairs in the map
keyValueMap.put(key, value);
}
}
// Use assertions to validate the key-value pairs in the map
assertEquals("John", keyValueMap.get("name"));
assertEquals("30", keyValueMap.get("age"));
assertEquals("NewYork", keyValueMap.get("city"));
}
在此範例中,輸入字串資料和預設分隔符號(空格)是在建立StringTokenizer
物件時指定的。然後,在迭代標記之後,我們使用等號(=)
作為分隔符號將每個標記分成鍵值對。
3. 使用正規表示式
具有Pattern
和Matcher
類別的正規表示式是將字串劃分為鍵值對的另一種方法。幸運的是,這種方法在處理各種分隔符號和模式時提供了額外的多功能性。
讓我們舉個例子:
@Test
public void givenDataWithPattern_whenUsingMatcher_thenPerformPatternMatching() {
String data = "name=John,age=30;city=NewYork";
Pattern pattern = Pattern.compile("\\b(\\w+)=(\\w+)\\b");
Matcher matcher = pattern.matcher(data);
// Create a map to store key-value pairs
Map<String, String> keyValueMap = new HashMap<>();
while (matcher.find()) {
String key = matcher.group(1);
String value = matcher.group(2);
// Store key-value pairs in the map
keyValueMap.put(key, value);
}
// Use assertions to validate the key-value pairs in the map
assertEquals("John", keyValueMap.get("name"));
assertEquals("30", keyValueMap.get("age"));
assertEquals("NewYork", keyValueMap.get("city"));
}
在此範例中,我們使用Pattern
類別產生一個正規表示式模式,如\b(\\w+)=(\\w+)\b
用於定位和擷取文字中的鍵值對。此外,它還識別由字母、數字或底線組成的鍵後跟等號'='
的模式,捕獲關聯的值,該值同樣由字母、數字或下劃線組成。
請注意, \b
標記確保找到完整的鍵值對,使得此正規表示式對於解析“key=value”
格式的給定字串中的結構化資料非常有用。
然後,使用輸入字串,我們利用Matcher
來定位並提取這些對。
4. 使用 Java 流
如果我們使用 Java 8 或更高版本,我們可以使用 Java Sreams 將文字乾淨地分解為鍵值對。
讓我們舉個例子:
@Test
public void givenStringData_whenUsingJavaMap_thenSplitAndValidate() {
String data = "name=John age=30 city=NewYork";
Map<String, String> keyValueMap = Arrays.stream(data.split(" "))
.map(kv -> kv.split("="))
.filter(kvArray -> kvArray.length == 2)
.collect(Collectors.toMap(kv -> kv[0], kv -> kv[1]));
assertEquals("John", keyValueMap.get("name"));
assertEquals("30", keyValueMap.get("age"));
assertEquals("NewYork", keyValueMap.get("city"));
}
在本例中,我們使用空格作為分隔符,將輸入字串分割為鍵值對數組。然後,我們透過使用map
過程使用等號 (=) 進一步劃分每一對。最後,我們刪除任何不包含兩個元素的配對,並將剩餘的對編譯成具有關聯鍵和值的Map
。
5. 結論
Java 流、 StringTokenizer
和正規表示式只是將 Java 字串分離為鍵值對的幾種技術。
我們的需求和我們正在使用的資料格式的複雜性將決定我們選擇的解決方案。透過了解這些策略,我們可以有效地提取和處理 Java 程式中儲存在鍵值對中的資料。
與往常一樣,本文的完整程式碼範例可以在 GitHub 上找到。