0

我有一个来自另一个进程的字符串,格式为:

{{"data1""data2"}{"column1""column2""column3"}}

双引号中的括号之间可以有任意数量的列或数据。我需要将每个数据点放入一个列表中,将每一列放入另一个列表中。

我正在使用 java 解析它......由于数据和列的数量未知,正则表达式遇到了一些问题。是否有图书馆或其他我可以使用的东西?

希望这是有道理的,谢谢!

4

2 回答 2

0

不确定 Regex 是否是最佳解决方案。我会使用String.split

int midIndex = myString.indexOf("}{");
String[] datas = myString.substring(2, midIndex).split("\"");
String[] columns = myString.substring(midIndex+2, myString.length()-2).split("\"");

以上将在数组中包含一些空字符串,但排除空字符串是微不足道的。

如果你使用 Guava 的Splitter,你可以这样做:

Splitter mySplitter = Splitter.on("\")
   .trimResults()
   .omitEmptyStrings();

 Iterable<String> datas = mySplitter.split(myString.substring(2, midIndex));
 Iterable<String> columns = mySplitter.split(myString.substring(
                                    midIndex+2, myString.length()-2));
于 2013-06-10T16:22:23.973 回答
0

ANTLR通常被推荐为解析器解决方案(类似于 Lex/Yacc,但在 Java 世界中),但如果数据格式很简单(例如,您的数据/列元素中没有大括号),我可能会使用正则表达式来提取内部数据实体,以及内部列实体(即大括号之间的数据)和进一步拆分,可能使用另一个正则表达式。

两个不同的正则表达式(或一个正则表达式和一个后续的字符串拆分操作)可能一个包罗万象的正则表达式简单得多。

于 2013-06-10T16:22:39.647 回答