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
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 所回答的那样,您绝对可以使用正则表达式来做到这一点。但前提是您不打算对结果进行任何其他处理。如果您需要进一步解析拆分字符串,并且再次使用正则表达式,这会使您的代码过于复杂。我宁愿建议您将字符串发送到 ajava.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 回答