我有一个字符串并尝试解析为字符串数组。字符串看起来像:
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"
答案 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]
,您将使用空字符串替换除数字0
和1
之外的所有内容。这反过来也用空字符串\n
替换""
,因此所有0和1都被连接起来。实际上,您需要跳过数字0
,1
和\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.