在Java中拆分字符串,在字符串部分使用可能的拆分字符

在Java中拆分字符串,在字符串部分使用可能的拆分字符,java,Java,如何将此字符串格式拆分为多个部分: message_type={any_text}&message_number={digits}&code={digits}&id={digits}&message={any_text}&timestamp={digits_with_decimal} 其中在消息={any_text}部分中,{any_text}可能包含&和=,因此无法按&或=进行字符串拆分 并且消息部分的顺序可以按照该顺序被加扰或不被加扰。我认为可以为解

如何将此字符串格式拆分为多个部分:

message_type={any_text}&message_number={digits}&code={digits}&id={digits}&message={any_text}&timestamp={digits_with_decimal}
其中在
消息={any_text}
部分中,{any_text}可能包含
&
=
,因此无法按
&
=
进行字符串拆分


并且消息部分的顺序可以按照该顺序被加扰或不被加扰。我认为可以为解决方案提取模式,
={the_text_needed}&
,但是这不适用于字符串的最后一部分,因为末尾将没有
&

假设所有字段都不包含
&
=
,您可以:

String[] fields = message.split("&");
Map<String,String> fieldMap = new LinkedHashMap<>();
for (String field:fields)
{
    String[] fieldParts = field.split("=");
    fieldMap.put(fieldParts[0],fieldParts[1]);
}
String[]fields=message.split(&”);
Map fieldMap=新建LinkedHashMap();
用于(字符串字段:字段)
{
字符串[]fieldParts=field.split(“”);
fieldMap.put(fieldParts[0],fieldParts[1]);
}

并拥有所有字段的映射。

要解析查询字符串,您应该检查:


我希望这能奏效-

String originalString = "message_type={a&=b}&message_number={1}&code={2}&id={3}&message={a&=b}&timestamp={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;
}

这有什么不同吗?是的,我想,因为这个问题是针对Regex解决方案的,所以这个问题不仅仅针对regexcan{any_text}contain
“}&
?:数据“{}”只是我需要完成的模式的表示,并不是消息字符串的一部分。我想我需要做的是,做一个indexof(“message_type”),然后逐字符遍历字符串,然后检查模式,例如&message_number=或EOLYes,没有大括号
String originalString = "message_type=msgTyp&message_number=1&code=2&message=a&=b&timestamp=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);