如果在字符串中的键或值中存在逗号,我们如何在Java中将String转换为Map?

时间:2016-01-27 14:25:52

标签: java string hashmap

让我们说,

String value = "{name = abc, address = xyz, abc, school = mno}"

我们如何将此字符串转换为Map,因为我们用逗号分隔字符串的键值对?这里当我尝试用逗号分割时,我得到一个错误,表示没有关键字abc的值,因为address = xyz充当键值对。

非常感谢任何通用方法。

4 个答案:

答案 0 :(得分:2)

根据我的理解,您希望创建一个地图,其中包含address键的条目的值为xyz, abc

您可以使用正则表达式。这是一个例子:

String s = "{name = abc, address = xyz, abc, school = mno}";
HashMap<String, String> map = new HashMap<String, String>();
for (String element : s.replaceAll("[{}]", "").split("(,(?=[^,]+=))")) {
    String[] entry = element.split("=");
    map.put(entry[0].trim(), entry[1].trim());
}

这样做的目的是首先从{删除所有}String字符,然后将每个String上的,拆分为,不包含=且以 //this function is used to fire click event function eventFire(el, etype){ if (el.fireEvent) { el.fireEvent('on' + etype); } else { var evObj = document.createEvent('Events'); evObj.initEvent(etype, true, false); el.dispatchEvent(evObj); } } function showPdf(){ eventFire(document.getElementById('picToClick'), 'click'); } 字符结尾的字符序列。

答案 1 :(得分:1)

我写了一个能解决你问题的函数。 也许您的IDE会显示一些语法错误,如果是这样,您必须自己更正。我在这个例子中使用了记事本。

以下是获得所需结果的几个步骤,然后是代码:

  1. 删除括号
  2. 按每个逗号分隔字符串“,”
  3. 再次使用等号“=”
  4. 拆分每个结果字符串
  5. 将第一个Array索引作为键,将第二个Array索引作为值放入地图中。 (可选)首先在Array索引上调用.trim()以删除空格。
  6. 所以这是一个示例函数:

        public void ParseToMap(String data, Map<String, String> map)
        {
            //Make sure we don't run into trouble
            if(data == null || data.isEmpty() || map == null)
            {
                return;
            }
    
            // Splits by ','
            String[] keyValuePairs = data.substring(1,data.length()-2).split(",");
    
            for(int i = 0; i < keyValuePairs.length(); i++)
            {
                // Splits by '='
                String _tmp = keyValuePairs[i].split("="); 
                if(_tmp.length() > 1)
                {
                    String key =    _tmp[0].trim(); // Get the key + remove useless spaces
                    String value =  _tmp[1].trim(); // Get the value + remove useless spaces
    
                    map.put(key, value); // Insert the pair
                }
            }
        }
    

答案 2 :(得分:0)

正如其他人在评论中所说,你应该使用JSON解析器来处理这个问题。

话虽如此,我们仍然可以提供一些能够处理您的示例字符串的代码(但很可能会因其他一些示例而失败):

String value = "{name = abc, address = xyz, abc, school = mno}";
Map<String, String> result = new HashMap<>();

String[] parts = value.replaceAll("[{}]", "").split(",");
for (String part : parts) {
    String[] operands = part.split("=");
    if (operands.length == 2) { // we have a x = y pattern
        result.put(operands[0].trim(), operands[1].trim());
    }
}

答案 3 :(得分:0)

您可以分割您的String两个等级,以获得键/值一对:

String value = "name = abc, address = xyz, abc, school = mno";
Map<String, String> map = new HashMap<String, String>();

String [] values = value.split(", ");

for (String couple : values){   
    if(couple.contains(" = ")) {
        String [] subValues = couple.split(" = ");
        map.put(subValues[0], subValues[1]);
    }else{
        map.put(couple, null);
    }   
}
  

注意

之前,您应该在String值中 {} 清除