0

次の形式の別のプロセスから文字列が届きます。

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

二重引用符で囲まれたブラケットの間には、任意の数の列またはデータが存在する可能性があります。各データ ポイントをリストに入れ、各列を別のリストに入れる必要があります。

Javaを使用して解析しています...データと列の数が不明なため、正規表現に問題があります。私が使用できるライブラリまたは何か他のものはありますか?

これが理にかなっていることを願っています、ありがとう!

4

2 に答える 2

0

正規表現が最適なソリューションかどうかはわかりません。私はString.splitを使用します。

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

上記では、配列にいくつかの空の文字列が含まれますが、空の文字列を除外するのは簡単です。

Guava's 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 の世界では)。ただし、データ形式が単純な場合 (たとえば、yourdata/column 要素に中かっこがない場合)、おそらく正規表現を使用して内部データ エンティティを抽出します。 、および内側の列エンティティ(つまり、中括弧の間のデータ)と、おそらく別の正規表現を使用してさらに分割します。

2 つの異なる正規表現 (または 1 つの正規表現とそれに続く 1 つの文字列分割操作) は、1 つのキャッチオール正規表現よりもはるかに単純です。

于 2013-06-10T16:22:39.647 に答える