2012-01-24 4 views
1

にコンマを印刷する必要はありません。これはこれまで私がやっていることです。は、私は、このように表示されるべき配列を反復処理しています最後

for (int k = 0; k < lineChar.length; k++) //for printing in reverse order 
      { 
       if(lineChar[n] != ','){ 

       System.out.print(lineChar[n]); 
       if(k == lineChar.length-1) 
        System.out.print(""); 
       else 
        System.out.print(","); 

       --n; 
       } 
      } 
      System.out.println(); 
+2

StringBufferを使用して、最終的に_every_ item(最初のもの)の前にコンマを入れてから、最後にループが完了した後にStringBufferを使用して文字列を構築するのが最も簡単です。 2つ目の文字から始まるStringBuffer全体を出力するための1つの '.print()'ステートメントそうすれば、ループ内に 'if/else'構造や他のテストは必要ありません。ところで、現在の 'if'ブランチに空文字列を表示する必要はありません。 – nnnnnn

+0

サードパーティライブラリを使用してもよろしいですか?あるいは、これを自分で行うコードを書こうと思っていますか? – Dave

答えて

2
int n=lineChar.lenght-1; 

//Next 2 lines are edit after comment by @aix 
while ((lineChar[n]==',') && (n>=0)) n--; 
if (n>=0) System.out.print(lineChar[n--]); 

for (; n >=0; n--) { 
    if(lineChar[n] != ',') { 
    System.out.print(","); 
    System.out.print(lineChar[n]); 
    } 
} 
+1

'lineChar [lineChar.length-1] == '、''ならば? OPのコードはそれを印刷せず、あなたのコードは印刷されます。 – NPE

+0

@aix:あなたは正しいです、私のコードを編集しました –

+1

最初の文字が "、"の場合はどうなりますか? – Adam

0

私は、このためにStringBuilderを使用したい:

StringBuilder sb = new StringBuilder(); 
for (int n = lineChar.length - 1; n >= 0; --n) { 
    if (lineChar[n] != ',') { 
     if (sb.length() > 0) { 
     sb.append(','); 
     } 
     sb.append(lineChar[n]); 
    } 
} 
System.out.println(sb.toString()); 

私はif (lineChar[n] != ',')は、アレイの一部である可能性があります任意のカンマの印刷を防ぐためにそこにあると仮定しています。何か他の理由でそこにいたら、その目的を説明してください。

4

はこれを試してみてくださいそれだけのためにStringBuilderを使用して、最後に一度印刷しているので、それが効率的です文字列を作成し、ループ内の状態をチェックせず、外部ライブラリは必要ありません。

public static void printChar(char[] array) { 
    if (array == null || array.length == 0) 
     return; 
    StringBuilder sb = new StringBuilder().append(array[0]); 
    for (int i = 1; i < array.length; i++) 
     sb.append(',').append(array[i]); 
    System.out.println(sb); 
} 
+1

です。私はこれが一番好きですが、私は1つの変更を行います。とにかく 'println'がオブジェクトの' toString'メソッドを呼び出すので、最後の行から 'toString'への呼び出しを削除してください。 –

+0

@DavidConrad done: –

0

私は最初の空の値を持つ区切り文字変数を使用するのが好きです。それから私は、すべての要素の前に区切り文字を印刷し、その後、私は本当の区切りトークン割り当て:私は何の条件と各ラウンドで唯一のオーバーヘッドの割り当てを持っていない

String delimiter = ""; 
for(int i=0; i<lineChar.length; i++) { 
    System.out.print(delimiter); 
    System.out.print(lineChar[ i ]); 
    delimiter = ","; 
} 

この道を。

これは、出力の最後に '、'を付ける方法を説明しています。しかし、あなたは他の条件を簡単に適応させることができます(逆の反復、特殊な値のスキップ)。

+0

は、(彼は印刷前にチェックしているので)望んでいないように見える配列にすべてのカンマを印刷します – Adam

0

あなたが学校でこれをやっていない場合、または達成方法に制限があるものは、アイテムを配列にプッシュし、次に繰り返して印刷することができます(forループ、joinステートメントまたは文字列ビルダ):

var result = new Array() 
    for (x = 0; x < lineChar.length; x++) { 
    if (lineChar[x] != ',') 
     result.push(lineChar[x]); 
    } 
    System.out.print(result.join(",")); 
    System.out.println(); 

か...さらに簡単:

var result = lineChar.split(","); 
    System.out.print(result.join(","); 
    System.out.println(); 

が記載されている他、より正確なものがあるので、私の第三の選択肢を削除するように編集。

注:私はc#とjscriptプログラマーですので、構文はJavaにとっては少し問題になるかもしれませんが、私はそれが似ていると思ってjscriptに行きました。

+0

OPの質問には 'java'タグがあります。この答えはJavaでは動作しません。最後の音符にかかわらず、OPが求めていることに固執する必要があります。 –

0

なぜ、最後に完全な文字列を追加した後に、最後の文字列をサブ文字列にしないのですか?

文字テキスト= "B、C、D、E、F、" 例えば

文字列finalText = text.substring(0、text。長さ() - 1);

関連する問題