繁体   English   中英

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

[英]splitting string only integers with new line regular expression

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

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"

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

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

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

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

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

您可以删除非数字并用连字符替换-然后将它们拆分-

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

只是用

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

代替

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

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

我会说你可以用一个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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM