如何解析要在 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
}
如果您无论如何都需要正则表达式,可以将以下模式与 Matcher#find()
一起使用:
([^#:]+):([^#]+)
解释:
([^#:]+)
- 除了 #
和 :
之外的 1+ 个字符(因此,我们留在键值对中并匹配键)
:
- 冒号
([^#]+)
- #
以外的 1+ 个字符(因此,我们将值匹配到 #
.
如何为 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
}
如果您无论如何都需要正则表达式,可以将以下模式与 Matcher#find()
一起使用:
([^#:]+):([^#]+)
解释:
([^#:]+)
- 除了#
和:
之外的 1+ 个字符(因此,我们留在键值对中并匹配键):
- 冒号([^#]+)
-#
以外的 1+ 个字符(因此,我们将值匹配到#
.