Java 解析映射中具有key=value对的字符串?

Java 解析映射中具有key=value对的字符串?,java,string,split,guava,splitter,Java,String,Split,Guava,Splitter,我有以下字符串,格式为key1=value1,key2=value2,我需要将其加载到映射(map)中,作为key=value,所以我需要在逗号上拆分,,然后加载cossn作为键和0其值 String payload = "cossn=0, itwrqm=200006033213"; Map<String, String> holder = Splitter.on(",").trimResults().withKeyValueSeparator("=").spli

我有以下字符串,格式为
key1=value1,key2=value2
,我需要将其加载到映射
(map)
中,作为
key=value
,所以我需要在逗号上拆分
,然后加载
cossn
作为键和
0
其值

String payload = "cossn=0, itwrqm=200006033213";
Map<String, String> holder =
          Splitter.on(",").trimResults().withKeyValueSeparator("=").split(payload);

我怎样才能使其适用于上述情况?对于上述情况,
将为
abc
,值应为
hello/=world
。可以这样做吗?

您可以添加一个数字来表示需要多少拆分,只需添加一个2即可

import java.util.HashMap;

public class HelloWorld{

     public static void main(String []args){
        HashMap<String, String> holder = new HashMap();
        String payload = "cossn=0, abc=hello/=world";
        String[] keyVals = payload.split(", ");
        for(String keyVal:keyVals)
        {
          String[] parts = keyVal.split("=",2);
          holder.put(parts[0],parts[1]);
        }

     }
}
import java.util.HashMap;
公共类HelloWorld{
公共静态void main(字符串[]args){
HashMap holder=新的HashMap();
String payload=“cossn=0,abc=hello/=world”;
字符串[]keyVals=payload.split(“,”);
用于(字符串keyVal:keyVals)
{
String[]parts=keyVal.split(“=”,2);
(第[0]部分、第[1]部分);
}
}
}

您可以使用
拆分器直接执行同样的操作:

Map<String, String> result = Splitter.on(',')
    .trimResults()
    .withKeyValueSeparator(
        Splitter.on('=')
            .limit(2)
            .trimResults())
    .split(input);
Map result=Splitter.on(','))
.trimpresults()
.withKeyValueSeparator(
Splitter.on('='))
.限额(2)
.trimResults())
.拆分(输入);

你怎样才能使什么工作准确?拆分器?JAVA有很多不同的方法可以做到这一点,但可能没有单行函数字符串。将2添加到拆分调用应该可以工作。将2添加到拆分后,我看到以下错误
类型拆分器中的方法拆分(CharSequence)。MapSplitter不适用于参数(String,int)
@user1950349:littlecegian指的是
String.split
,您没有使用它(但Tomer在下面的回答中使用了它)
MapSplitter.split
没有任何需要多次拆分的重载,但是您可以使用
Splitter
上的
limit()
API获得相同的效果。这是我看到的
类型拆分器中的方法split(CharSequence)错误。MapSplitter不适用于参数(String,int)
。你考虑过使用循环吗?你能提供一个例子吗?@user1950349查看我的编辑我刚刚尝试了这个,它在这一行
holder.put(parts[0],parts[1])上给出了
java.lang.ArrayIndexOutOfBoundsException
。知道怎么了吗?
Map<String, String> result = Splitter.on(',')
    .trimResults()
    .withKeyValueSeparator(
        Splitter.on('=')
            .limit(2)
            .trimResults())
    .split(input);