有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用特定的词来分隔可以是动态的字符串

我试图基于某些键分离某个字符串,并将它们以键值对的形式添加到映射中。钥匙可以改变位置。我是新加入regex的,希望得到一些帮助来完成它

我有一个字符串"key1=valueforkey1&key2=valueforkey2"。此字符串也可以更改为"key2=valueforkey2&key1=valueforkey1"

我的正则表达式适用于上述情况,并正确地分隔键和值

当值在键前包含“=”时,它不起作用

比如说

"key1=valueforkey1=&key2=valueforkey2"

"key1=valueforkey1==&key2=valueforkey2".

我的地图将包含

map("key1", "valueforkey1") 

map("key2", "valueforkey2")

而不是

map("key1", "valueforkey1==") 

map("key2", "valueforkey2") 
String delimiter = "[= & ?]+";
String[] split = text.split(delimiter );
for (int i=0; i<split.length; i+=2) {
    maps.put(split[i], split[i+1]);
}

我希望分离字符串并将它们添加到映射中的键值对中

map("key1", "valueforkey1") or

map("key1", "valueforkey1=") or

map("key1", "valueforkey1==")

map("key2", "valueforkey2") or

map("key2", "valueforkey2=") or

map("key2", "valueforkey2==")

共 (1) 个答案

  1. # 1 楼答案

    你可以用

    ([^=&\s]+)=(.*?)(?=&[^=&\s]+=|$)
    

    regex demo

    • ([^=&\\s]+)-第1组:除=&和空格以外的任何1+字符
    • =-a =符号
    • (.*?)-第2组:除换行符以外的任何0+字符,尽可能少
    • (?=&[^=&\\s]+=|$)-在当前位置的右侧,必须紧跟着&,后面是除=&和空格之外的1+字符,然后是=或字符串结尾

    Java demo

    String str = "key1=valueforkey1==&key2=valueforkey2";
    Pattern p = Pattern.compile("([^=&\\s]+)=(.*?)(?=&[^=&\\s]+=|$)");
    Matcher m = p.matcher(str);
    Map<String, String> res = new HashMap<String, String>();
    while (m.find()) {
        res.put(m.group(1), m.group(2));
    }
    System.out.println(res); // => {key1=valueforkey1==, key2=valueforkey2}