从一个长字符串中提取字符串

时间:2015-07-31 22:38:55

标签: java regex string parsing

我有一个像这样的字符串

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

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

即。我想要: {&#34; 0.01,3.45&#34;&#34; 5.674,8.712&#34;&#34; 4.321.8.892&#34;&#34; 3.412,6.781&#34;} < / p>

这是我的代码:

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

..我得到{&#34;&#34;,&#34;,&#34;,&#34;,&#34;,&#34;,&#34;}

我也试过了一些不同的正则表达式,但是他们给了我一个带有一个(长)字符串元素的数组,这显然是我不想要的

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

感谢。

3 个答案:

答案 0 :(得分:0)

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

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]

答案 1 :(得分:0)

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

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

有很多Json解析库的例子。谷歌Gson是第一个想到的例子,但你可以尝试其他人并找到你最喜欢的。

答案 2 :(得分:0)

正则表达式是正确的。你需要使用像

这样的东西
List<String> result = new ArrayList<String>();
Matcher matcher = pattern.matcher(myString);

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

group(1)为你提供了第一组正则表达式(这是parantheses中的所有内容)。如果您需要数组,则可以按result.toArray()

转换列表

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