2

次のような単一の文字列があります。

6
0 1 1 0 0
1 1 1 1 0
0 0 0 1 0
4
1 1 0 1 0
0 0 0 1 0
1 1 0 1 0
0 1 1 0 0

次のような 2 つの異なる文字列に分割したいと考えています。

6
0 1 1 0 0
1 1 1 1 0
0 0 0 1 0

他の文字列は次のとおりです。

4
1 1 0 1 0
0 0 0 1 0
1 1 0 1 0
0 1 1 0 0

正規表現を使用してこれを行いますか? それとももっと良い方法がありますか?注: 6 と 4 を除いて、他の数字は常に 1 または 0 です。

4

4 に答える 4

4

改行で分割したいのですが、次の文字が数字のみで改行の場合のみです。
この正規表現を試してください:

"\n(?=\\d+\\n)"

上記の条件をアサートするために先読みを使用します。

ここにいくつかのテストコードがあります:

public static void main(String[] args) {
    String input = "6\n0 1 1 0 0\n1 1 1 1 0\n0 0 0 1 0\n4\n1 1 0 1 0\n0 0 0 1 0\n1 1 0 1 0\n0 1 1 0 0";
    String[] parts = input.split("\n(?=\\d+\\n)");
    System.out.println(Arrays.toString(parts));
}

出力:

[6
0 1 1 0 0
1 1 1 1 0
0 0 0 1 0, 4
1 1 0 1 0
0 0 0 1 0
1 1 0 1 0
0 1 1 0 0]
于 2012-10-14T05:32:12.410 に答える
1

@Bohemianが答えたように、間違いなく正規表現でそれを行うことができます。ただし、結果に対して他の処理を行わない場合に限ります。分割された文字列をさらに解析する必要があり、正規表現を再度使用すると、コードが複雑になりすぎます。java.util.Scanner文字列を に送信し、文字列全体をより使いやすいデータ構造またはクラスのセットに解析して、後で使用することをお勧めします。

于 2012-10-14T05:42:12.660 に答える
-1

はい、正規表現が必要です。を作成してjava.util.regex.Pattern.compile("([64][^64]+?)", Pattern.MULTILINE)から作成しjava.util.regex.Matcher、CharSequence を介して find() を開始できます。何かを find() するたびに、 group(1) を照会できます。

于 2012-10-14T05:37:35.813 に答える
-2

正規表現なしで可能です:

String phrase = 
"6
0 1 1 0 0
1 1 1 1 0
0 0 0 1 0
4
1 1 0 1 0
0 0 0 1 0
1 1 0 1 0
0 1 1 0 0";

String delims = "[4 6]+";

String[] parts= phrase.split(delims);
于 2012-10-14T05:26:53.293 に答える