![](/img/trans.png)
[英]How can I parse a “key1:value1, value, key2:value3” string into ArrayLists?
[英]Java How To Parse String With Pattern [key1]value1[key2]value2[key3]value3
我的Java程序中有一個具有以下模式的鍵值字符串:
[key1]value1[key2]value2[key3]value3
其中key
和value
是字符串。
如何解析此字符串並將鍵值對放入Map中?
首先,通過使用正則表達式分割字符串,它應該提供值,然后使用相同的正則表達式解析字符串可以提供密鑰。 因為我很少使用過正則表達式,所以想出這個正則表達式是我的主要問題。
正則表達式可以將字符串拆分為多個部分,並且可以通過簡單的循環將其添加到地圖中。
String input = "[key1]value1[key2]value2[key3]value3";
// Gives ["", "key1", "value1", "key2", "value2", ...]
String[] data = input.split("\\[|\\]");
Map<String, String> dict = new HashMap<>();
for(int i=1; i<data.length; )
dict.put(data[i++], i == data.length ? "" : data[i++]);
放置條件的原因是“ String.split”會在最后刪除空值,這意味着如果最后一個值為空,則不會將其包含在數組中。 該條件僅檢查該值是否存在,如果不存在,則將其替換為空字符串。
您可以使用兩個不同的正則表達式輕松解析:
\\\\[(.*?)]
\\\\](.*?)\\\\[|\\\\](.*)
例:
public class KeyValueParse {
public static void main(String[] args) {
String input = "[key1]value1[key2]value2[key3]value3";
String keyRegEx = "\\[(.*?)]";
String valueRegEx = "\\](.*?)\\[|\\](.*)";
Map<String, String> map = new HashMap<>();
Pattern keyPattern = Pattern.compile(keyRegEx);
Pattern valuePattern = Pattern.compile(valueRegEx);
Matcher keyMatcher = keyPattern.matcher(input);
Matcher valueMatcher = valuePattern.matcher(input);
System.out.println("-----KeyValue pairs-------");
while (keyMatcher.find() && valueMatcher.find()) {
String key = keyMatcher.group().replaceAll("\\[|\\]", "");
String value = valueMatcher.group().replaceAll("\\[|\\]", "");
System.out.println("Key Pair : [ key = " + key + ", value= " + value + "]");
//put key and value in map
map.put(key, value);
}
}
}
您可以嘗試以下方法:
String str = "[key1]value1[key2]value2[key3]value3";
String[] strings = str.split("\\[");
Map<String, String> map = new HashMap<>();
for (String string : strings) {
if (string.length() > 0) {
String[] array = string.split("\\]");
map.put(array[0], array[1]);
}
}
System.out.println(map);
結果是:
{key1=value1, key2=value2, key3=value3}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.