您如何将此String格式拆分为多个部分:
message_type={any_text}&message_number={digits}&code={digits}&id={digits}&message={any_text}×tamp={digits_with_decimal}
在message={any_text}
部分中, {any_text} 可能包含&
和=
,因此无法通过{{分割字符串1}}或&
消息部分的顺序可能按此顺序加扰或不加扰。我认为可以为解决方案=
提取模式,但这不适用于String的最后部分,因为最后不会有={the_text_needed}&
。
答案 0 :(得分:1)
我希望这会奏效 -
String originalString = "message_type={a&=b}&message_number={1}&code={2}&id={3}&message={a&=b}×tamp={12}";
Map<String, String> resultMap = new HashMap<String, String>();
String[] splitted1 = originalString.split("&+(?![^{]*})");
for (String str : splitted1) {
String[] splitted2 = str.split("=+(?![^{]*})");
resultMap.put(splitted2[0], splitted2[1]);
splitted2 = null;
}
如果参数值没有包含在花括号中,那么它真的很难。我可以想到一个解决方案,但我不知道它是否会在某种情况下破裂 -
String originalString = "message_type=msgTyp&message_number=1&code=2&message=a&=b×tamp=12";
String[] predefinedParameters = {"message_type", "message_number", "code", "message", "timestamp"};
String delimeter = "###";
for (String str : predefinedParameters) {
originalString = originalString.replace(str+"=", delimeter+str+"=");
}
originalString = originalString.substring(delimeter.length());
String[] result = originalString.split("&"+delimeter);
答案 1 :(得分:0)
假设所有字段都不包含&
或=
,您可以:
String[] fields = message.split("&");
Map<String,String> fieldMap = new LinkedHashMap<>();
for (String field:fields)
{
String[] fieldParts = field.split("=");
fieldMap.put(fieldParts[0],fieldParts[1]);
}
并拥有所有字段的地图。
答案 2 :(得分:0)
你要做的是解析一个查询字符串,你应该检查: