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

时间:2016-02-24 04:55:38

标签: java regex

我的Java程序中有一个带有以下模式的键值字符串:

set(gca, 'XTickLabelRotation', 90)

其中[key1]value1[key2]value2[key3]value3 key是字符串。

如何解析此字符串并将键值对带入Map?

首先,通过使用正则表达式拆分字符串,它应该给出值,然后使用相同的正则表达式解析字符串可以提供键。提出这个正则表达式是我的主要问题,因为我几乎没有使用正则表达式。

3 个答案:

答案 0 :(得分:3)

正则表达式可以将字符串拆分为多个部分,一个简单的循环可以将其添加到地图中;

$(wrapper).on("input", ".to", function(){    
    var nextFrom = $(this).parent().nextAll("div").first().children("input").first();
    if($(nextFrom).length){
      $(nextFrom).val(parseInt(this.value) + 1);      
    }     
});

put中条件的原因是`String.split'在末尾删除空值,这意味着如果最后一个值为空,它将不包含在数组中。条件只检查值是否存在,如果不存在,则将其替换为空字符串。

答案 1 :(得分:1)

您可以使用两种不同的正则表达式轻松解析:

  1. 密钥提取regEx为\\[(.*?)]
  2. 值提取regEx为\\](.*?)\\[|\\](.*)
  3. 示例:

    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);
            }
        }
    }
    

答案 2 :(得分:1)

你可以试试这个:

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}