簡體   English   中英

Java如何使用模式[key1] value1 [key2] value2 [key3] value3解析字符串

[英]Java How To Parse String With Pattern [key1]value1[key2]value2[key3]value3

我的Java程序中有一個具有以下模式的鍵值字符串:

[key1]value1[key2]value2[key3]value3

其中keyvalue是字符串。

如何解析此字符串並將鍵值對放入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”會在最后刪除空值,這意味着如果最后一個值為空,則不會將其包含在數組中。 該條件僅檢查該值是否存在,如果不存在,則將其替換為空字符串。

您可以使用兩個不同的正則表達式輕松解析:

  1. 密鑰提取正則表達式為\\\\[(.*?)]
  2. 值提取正則表達式為\\\\](.*?)\\\\[|\\\\](.*)

例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM