用于拆分字符串的正则表达式(Java)

时间:2012-10-14 05:23:36

标签: java

我有一个字符串,看起来像:

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 个答案:

答案 0 :(得分:4)

您希望拆分换行符,但仅当以下字符仅为数字时,才会换行。
试试这个正则表达式:

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

它使用look ahead来断言上述条件。

这是一些测试代码:

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]

答案 1 :(得分:1)

正如@Bohemian所回答的那样,你绝对可以使用正则表达式。但是,只有你不打算对结果进行任何其他处理。如果您需要进一步解析拆分字符串,如果再次使用正则表达式,则会使代码过于复杂。我宁愿建议您将字符串发送到java.util.Scanner并将整个字符串解析为一些更有用的数据结构或类集以供将来使用。

答案 2 :(得分:-1)

是的,它需要正则表达式。您可以创建java.util.regex.Pattern.compile("([64][^64]+?)", Pattern.MULTILINE)并从中创建java.util.regex.Matcher并通过CharSequence开始查找()。每次找到()时都可以查询group(1)。

答案 3 :(得分:-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);