如何解析要在 java 中映射的字符串

How to parse string to map in java

如何为 java

中的以下字符串编写解析器

"SiteId:BLR232#Latitude:12.918444#Longitude:77.5940136#NetworkType:4g#Type:NONE#Type of Complaint:Call Drop#Sample Number:7022979575#Problem Description:agshjs vshsijsb#"

因此结果输出将在 hashmap java

Key = SiteId, Value = BLR232
Key = Type, Value = NONE
Key = Problem Description, Value = agshjs vshsijsb
Key = Sample Number, Value = 7022979575
Key = NetworkType, Value = 4g
Key = Latitude, Value = 12.918444
Key = Type of Complaint, Value = Call Drop
Key = Longitude, Value = 77.5940136

我曾尝试使用 Pattern p = Pattern.compile("(\w+):(\w+)"); 但无法完全满足我的需要。

您的 (\w+):(\w+) 仅匹配 : 之前和之后的单个单词。您将 # 作为记录分隔符,将 : 作为键值分隔符,因此您不能只依赖 \w class.

请注意,您可以通过将带有 # 的字符串拆分为键值对,然后将每个键值对与 ::

拆分来解决问题
String str = "SiteId:BLR232#Latitude:12.918444#Longitude:77.5940136#NetworkType:4g#Type:NONE#Type of Complaint:Call Drop#Sample Number:7022979575#Problem Description:agshjs vshsijsb#";
String[] kvps = str.split("#");
Map<String, String> res = new HashMap<String, String>();
for(String kvp : kvps) {
    String[] parts = kvp.split(":");
    res.put(parts[0], parts[1]);
    System.out.println(parts[0] + " - " + parts[1]); // just demo
}

IDEONE demo

如果您无论如何都需要正则表达式,可以将以下模式与 Matcher#find() 一起使用:

([^#:]+):([^#]+)

解释:

  • ([^#:]+) - 除了 #: 之外的 1+ 个字符(因此,我们留在键值对中并匹配键)
  • : - 冒号
  • ([^#]+) - # 以外的 1+ 个字符(因此,我们将值匹配到 #.

regex demo