2017-04-12 8 views
0

私は余分なコンマとスペースを配列から削除する方法を知りましたか?プログラムを実行すると、{1、2、3、4、5、}が得られます。私が望むのは {1,2,3,4,5}です。メインは同じままでなければなりません。 PrintArrayメソッドは私が助けが必要なものです。配列内の最後のカンマと空白を削除するには? Java

重複する質問文を参照してください。 これは、ユーザーに番号を尋ねて、それに応じて配列を出力するためです。これは重複する質問ではありません。

public static void printArray(int[] myArray) 
    { 

     System.out.print("["); 
     for(int i = 0; i < myArray.length; i++) 
     { 
      myArray[i] = i + 1; 
      System.out.print(myArray[i] + ", "); 
     } 
     System.out.println("]"); 
    } 
} 
+1

あなたは最後のものを除くすべての要素を印刷することができ、その後、バック「]」を追加、その後別々に – Meccano

+0

最後の要素を印刷し、最後の3つの文字を切り捨てます。あるいは、 ''、 ''を盲目的に追加するのではなく、 '' myArray'の長さと 'i'の値をチェックして' '、' 'を追加する必要があるかどうかを判断してください。 – WOUNDEDStevenJones

+0

私はときどき 'StringBuilder'で出力をビルドし、最後のスペースとカンマを必ず削除します。 'StringBuilder'はフードの' char [] 'だけなので、最後から2文字を削除するのは簡単です。結果として得られるコードはかなりコンパクトで効率的です。 – markspace

答えて

5

最初に印刷しないでください。文字列の前にカンマを印刷し、i > 0の場合のみ。

public static void printArray(int[] myArray) 
{ 

    System.out.print("["); 
    for(int i = 0; i < myArray.length; i++) 
    { 
     myArray[i] = i + 1; 
     if (i > 0) 
     { 
      System.out.print(", "); 
     } 
     System.out.print(myArray[i]); 
    } 
    System.out.println("]"); 
} 
2

Iは、(指数> 0に対して、次の項目の前にコンマ印刷)

System.out.print("["); 
for(int i = 0; i < myArray.length; i++) { 
    myArray[i] = i + 1; 
    System.out.print(((i > 0) ? ", " : "") + myArray[i]); 
} 
System.out.print("]"); 

または、Java(登録商標)8、

System.out.println(
    "[" + 
    Arrays.stream(array) 
     .mapToObj(String::valueOf) 
     .collect(Collectors.joining(", ")) 
    + "]" 
); 
+0

' Collections.asList'はプリミティブ型の配列に対しては機能しません。代わりに、 'Stream.of'または' Arrays.stream'を使用したいかもしれません。 – Pshemo

+0

そうですね、私は 'Arrays.asList'(' Collections.asList'というものはありません)をタイプしている間は考えていました。 Hehe :)ありがとう!改正された。 :) – Gabe

+0

実際に私は 'Arrays.asList'についても考えていたので、問題はそのままです。見てみましょう。あなたが 'int [] array = {1,2}'を持っていて、 'Arrays.asList'を使っているなら、配列そのものをひとつ含む' List 'が得られます。 'List '(ジェネリック型はプリミティブではないので)や 'List '(オートバッファリングはプリミティブ型にのみ適用されますが、* any *配列はプリミティブ型ではなく、 'int []' – Pshemo

4

としてそれを修正することになりますこれを行う簡単な方法は、ただの使用です。Arrays.toString

public static void printArray(int[] myArray) 
{ 
    System.out.print(Arrays.toString(myArray)); 
} 

これは、中括弧の代わりにかっこを表示することに注意してください。完全性のために、これを自分で実装する場合は、配列がnullであることと、長さ= 0のような他の境界条件に加えてチェックすることを忘れないでください。StringBuilderを使用する例です。 nullと長さ= 0をチェックした後、最後の2文字を削除します。リスト/配列内の各項目について計算する文字列が非常に複雑な場合は、ループ外の各項目を作成するコードをコピーするよりも簡単です。ループを通して毎回i==array.length-1を確認するよりも少し速くしてください。

public class MyArraysToString 
{ 

    public static void main(String[] args) 
    { 
     int[] test = { 8, 7, 6, 5, 4, }; 
     printArray(test); 
     System.out.println(myToString(null)); 
     System.out.println(myToString(new int[0])); 
     System.out.println(myToString(test)); 
    } 

    public static void printArray(int[] myArray) 
    { 
     System.out.println(Arrays.toString(myArray)); 
    } 

    public static String myToString(int[] a) { 
     if(a == null) return "null"; 
     if(a.length == 0) return "{}"; 
     StringBuilder sb = new StringBuilder(); 
     sb.append('{'); 
     for (int i = 0; i < a.length; i++) { 
     sb.append(a[i]); 
     sb.append(", "); 
     } 
     sb.setLength(sb.length()-2); 
     sb.append('}'); 
     return sb.toString(); 
    } 
} 
+0

注:むしろ混乱して、単に配列のOPコードを出力するのではなく、それを初期化します。 –

+0

ああ、OPのコード。うん、それはちょっと変だ。 – markspace

+0

元のコードには、あなたのコードとは異なる何かをする 'myArray [i] = i + 1; 'があります。あなたのコードはもっと理にかなっていますが、同じことはしません。 –

関連する問題