仅使用新行正则表达式将字符串拆分为整数

时间:2016-04-12 17:50:30

标签: java regex string

我有一个字符串并尝试解析为字符串数组。字符串看起来像:

c: 00000
u: 00001
h: 0001
r: 0010
s: 0011
e: 010
i: 0110
n: 0111

以上示例仅涉及一个字符串引用,如String str = testClass.toString(); 我只想将0和1放入一个字符串数组中。

String filtered = str.replaceAll("[^0-1]","");
        String[] numbers = filtered.split("\n");
        for (String a : numbers) {
            System.out.println(a);
        }

我编写了上面的代码,但它只提供了一行输出。如何解决?

000000000100010010001101001100111

我打算作为

str[0] = "00000";
...
str[7] = "0111"

4 个答案:

答案 0 :(得分:0)

问题是,当您致电'\n'时,str.replaceAll("[^0-1]","")也会被空字符串替换。

一种可能的方法是替换除数字AND '\n'以外的所有字符:

String filtered = str.replaceAll("[^01\n]","");
String[] list = filtered.split("\n");  

另一种方法是直接拆分,仅保留"0""1"

String[] list = str.split("[^01]+");

答案 1 :(得分:0)

您可以删除非数字并替换为连字符-,然后将其拆分为-

String filtered = str.replaceAll("[^0-1]+","-");
        String[] numbers = filtered.split("-");
        for (String a : numbers) {
            System.out.println(a);
        }

答案 2 :(得分:0)

只需使用

String filtered = str.replaceAll("[^0-1(\n)]","");

而不是

String filtered = `str.replaceAll("[^0-1]","");

你的其余代码很好。问题是,通过使用正则表达式[^0-1],您将使用空字符串替换除数字01之外的所有内容。这反过来也用空字符串\n替换"",因此所有0和1都被连接起来。实际上,您需要跳过数字01\n

答案 3 :(得分:0)

我会说你可以用一个split()来获取你的数字数组,但你必须忽略那里的第一个值(它是空的)。他的效率比使用split + replaceAll()更有效。

public static void main(String[] args) {

    String s = "c: 00000" + "\n" + "u: 00001" + "\n" + "h: 0001";
    System.out.println(s);
    String[] arr = s.split("\\D+");
    System.out.println(Arrays.toString(arr));
}

O / P:

c: 00000
u: 00001
h: 0001
[, 00000, 00001, 0001] // ignore the first empty value.