【问题标题】:Extracting strings from one long string从一个长字符串中提取字符串
【发布时间】:2015-07-31 22:38:54
【问题描述】:

我有一个这样的字符串

"[0.01,3.45],[5.674,8.712],[4.321,8.892],[3.412,6.781]"

我需要提取每一对数字,以便每一对都是字符串数组中的一个单独的字符串

即我想: {"0.01,3.45","5.674,8.712","4.321.8.892","3.412,6.781"}

这是我的代码:

    Pattern pattern = Pattern.compile("\\[(.*?)\\]");
    String[] result = pattern.split(myString);

.. 我得到 {"",",",",","}

我也尝试了一些不同的正则表达式,但它们只是给了我一个包含一个(长)字符串元素的数组,这显然是我不想要的

问题是正则表达式还是我应该使用不同的代码?

谢谢。

【问题讨论】:

  • 您的正则表达式没有达到您的预期。 (Split 需要拆分正则表达式,而不是要保留的正则表达式)...考虑regular-expressions.info 作为初学者,然后在regex101.comdebuggex.com 上玩arround 在侧节点上:这可以在没有的情况下解决正则表达式很容易。
  • 拆分],[ 并按照您的预期进行。或者包裹在[] 中并假装它是json。

标签: java regex string parsing


【解决方案1】:

为什么不用括号和逗号分开 (],[)?

String myString = "[0.01,3.45],[5.674,8.712],[4.321,8.892],[3.412,6.781]";
// remove start and close brackets
myString = myString.substring(1, myString.length() - 1);
String[] result = myString.split("\\],\\[");
System.out.println(Arrays.toString(result));
// [0.01,3.45, 5.674,8.712, 4.321,8.892, 3.412,6.781]

【讨论】:

  • 如果你想从结果中去掉第一个开头的“[”和最后一个结尾的“]”,试试 myString.substring(1, myString.length() - 1).split(" \],\[);
【解决方案2】:

我的回答是我认为您应该使用不同的代码(即不是正则表达式)。我更愿意利用数据的类似 Json 的外观。

您应该考虑使用 Json 解析库将字符串解析为 java List<List<BigDecimal>>(因为 dognose 指出给定的输入实际上不是 json)。然后,您可以随意连接该对象的组件并构造任何必要的数组或字符串。

Json 解析库的例子很多。 Google Gson 是第一个想到的示例,但您可以尝试其他示例并找到您最喜欢的示例。

【讨论】:

  • 示例不是有效的 JSON。
  • 好点 - 它可以通过包围“[”...“]”使其成为有效的 Json,但此时它变得与正则表达式解决方案一样混乱。
【解决方案3】:

正则表达式是正确的。你需要使用类似的东西

List<String> result = new ArrayList<String>();
Matcher matcher = pattern.matcher(myString);

while(matcher.find()){
    result.add(matcher.group(1));
}

group(1) 为您提供第一组正则表达式(即括号内的所有内容)。如果您因此需要一个数组,您可以通过result.toArray() 转换列表

如果您使用 Pattern.split,它将使用正则表达式作为分隔符,因此您可以获得匹配项之间的所有内容,而不是匹配项本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2014-12-29
    相关资源
    最近更新 更多