我有一个字符串,看起来像:
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。
答案 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);