我的Java程序中有一个带有以下模式的键值字符串:
set(gca, 'XTickLabelRotation', 90)
其中[key1]value1[key2]value2[key3]value3
和key
是字符串。
如何解析此字符串并将键值对带入Map?
首先,通过使用正则表达式拆分字符串,它应该给出值,然后使用相同的正则表达式解析字符串可以提供键。提出这个正则表达式是我的主要问题,因为我几乎没有使用正则表达式。
答案 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)
您可以使用两种不同的正则表达式轻松解析:
\\[(.*?)]
\\](.*?)\\[|\\](.*)
示例:强>
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}