让我们说,
String value = "{name = abc, address = xyz, abc, school = mno}"
我们如何将此字符串转换为Map,因为我们用逗号分隔字符串的键值对?这里当我尝试用逗号分割时,我得到一个错误,表示没有关键字abc的值,因为address = xyz充当键值对。
非常感谢任何通用方法。
答案 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会显示一些语法错误,如果是这样,您必须自己更正。我在这个例子中使用了记事本。
以下是获得所需结果的几个步骤,然后是代码:
所以这是一个示例函数:
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
值中 {} 清除