【问题标题】:Split String in Java with potential split characters used in String parts在 Java 中拆分字符串,在字符串部分中使用潜在的拆分字符
【发布时间】:2015-03-15 05:08:56
【问题描述】:

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

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

message={any_text} 部分中,{any_text} 可能包含&=,因此无法通过&= 进行字符串拆分

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

【问题讨论】:

  • 这和this有什么不同吗?
  • 是的,我认为,因为这个问题是针对正则表达式解决方案的,所以这个问题不仅仅针对正则表达式
  • {any_text} 可以包含"}&" 吗? :D
  • “{}”只是我对需要完成的模式的表示,并不是消息字符串的一部分
  • 我想我需要做的是,做一个 indexof("message_type") 然后逐个字符地遍历字符串,然后检查一个模式,例如&message_number= 或 EOL

标签: java


【解决方案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);

【讨论】:

  • 是的,没有花括号
【解决方案2】:

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

String[] fields = message.split("&");
Map<String,String> fieldMap = new LinkedHashMap<>();
for (String field:fields)
{
    String[] fieldParts = field.split("=");
    fieldMap.put(fieldParts[0],fieldParts[1]);
}

并拥有所有领域的地图。

【讨论】:

    【解决方案3】:

    您尝试做的是解析查询字符串,您应该检查:

    Query String Manipulation in Java

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 2012-03-21
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      相关资源
      最近更新 更多