2017-01-05 12 views
1

配列を印刷していますが、数値を表示したいだけです。 String(角かっこのみ)から角括弧とカンマを削除します。これまではコンマを削除できましたが、replaceAllメソッドに引数を追加する方法を探していました。文字列内の複数の文字を置換する

角括弧とカンマを削除するにはどうすればよいですか?

cubeToString = Arrays.deepToString(cube); 
System.out.println(cubeToString); 
String cleanLine = ""; 
cleanLine = cubeToString.replaceAll(", ", ""); //I want to put all braces in this statement too 
System.out.println(cleanLine); 

出力は次のとおりです。

[[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5]] 
[[0000][1111][2222][3333][4444][5555]] 
+3

'cubeToString.replaceAll(" \\ D

よりよい、より効率的なアプローチは、直接あなたが任意のカンマのか、角括弧なしで必要な文字列を構築することです"、") ' – 4castle

答えて

4

あなたは(あなたの入力から)[]を逃れるためにパターンを形成するために、特殊文字[]を使用して、\\できるよう、

cleanLine = cubeToString.replaceAll("[\\[\\]\\s,]", ""); 

またはすべてをn ot a digit。同様に、

cleanLine = cubeToString.replaceAll("\\D", ""); 
+0

ありがとうございました:) – cuber

+0

の側ではありません@Elliot Frisch文字列の数値を変更したい場合、0を1に、3を0に変更するとどうなりますか?それらは特殊文字ではなく、複数の文字を変更しています。 – cuber

+0

私はたぶん 'Map 'を使用して、 '/'から '' String'へのマッピングを、 '' StringBuilder''には単純なループを使用しています。 –

0

あなたがやっていることは、スクリプト言語を使うように効果的にJavaを使用していることです。 この場合、配列には数字しか含まれていないため、配列要素内に表示される可能性のあるエスケープ文字を心配する必要がないため、うまくいく場合があります。

しかし、最終的な結果を得るためには、正規表現(replaceAll)を使用して文字列を何度か変換するのはまだ効率的でもJavaに似ていません。

public static void main(String[] args) throws Exception { 
    int[][] cube = { { 0, 0, 0, 0 }, { 1, 1, 1, 1 }, { 2, 2, 2, 2 }, { 3, 3, 3, 3 }, { 4, 4, 4, 4 }, 
      { 5, 5, 5, 5 } }; 

    StringBuilder builder = new StringBuilder(); 
    for (int[] r : cube) { 
     for (int c : r) { 
      builder.append(c); 
     } 
    } 
    String cleanLine = builder.toString(); 
    System.out.println(cleanLine); 
} 

出力:

000011112222333344445555 
関連する問題