2016-04-12 17 views
1

私は文字列を持っていて、それを文字列配列に解析しようとします。文字列のように見える:改行文字列のみを改行する正規表現

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

上記の例では、私は単に文字列の配列に0と1のを入れたいString str = testClass.toString(); ような程度のみ1つの文字列の参照です。

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

私は上記のコードを書いていますが、出力は1行だけです。どのように修正することができますか?

000000000100010010001101001100111 

私はこの問題は、あなたがstr.replaceAll("[^0-1]","")を呼び出すとき'\n'も空の文字列に置き換えられていることである

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

そんなに 'に分割しようとすると、改行が含まれて0または1でなかったすべてのものを、置き換え "\ nが"'その後」にISN仕事に行く。 – azurefrog

答えて

0

としてつもり。

一つの可能​​なアプローチが数字と'\n'以外のすべての文字を置き換えることです:

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

別のアプローチは、直接分割するだろう、だけ"0""1"を保つ:

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

あなたは非数字を除去することができます-のハイフンに置き換えてから-に分割します。

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

ちょうどあなたのコードの代わりに

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

残りは大丈夫です

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

を使用しています。問題は、正規表現[^0-1]を使用すると、数字01を除くすべてが空の文字列に置き換えられます。これにより、\nも空の文字列""に置き換えられます。したがって、すべて0と1が連結されます。実際には数字01\nをスキップする必要があります。

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. 
関連する問題