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

时间:2015-03-15 05:08:57

标签: java

您如何将此String格式拆分为多个部分:

message_type={any_text}&message_number={digits}&code={digits}&id={digits}&message={any_text}&timestamp={digits_with_decimal}

message={any_text}部分中, {any_text} 可能包含&=,因此无法通过{{分割字符串1}}或&

消息部分的顺序可能按此顺序加扰或不加扰。我认为可以为解决方案=提取模式,但这不适用于String的最后部分,因为最后不会有={the_text_needed}&

3 个答案:

答案 0 :(得分: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;
}

如果参数值没有包含在花括号中,那么它真的很难。我可以想到一个解决方案,但我不知道它是否会在某种情况下破裂 -

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);

答案 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)

你要做的是解析一个查询字符串,你应该检查:

Query String Manipulation in Java