13

Java では、 Stackの内容を出力したいと考えています。このtoString()メソッドは、コンマで区切られた角括弧で囲まれたそれらを出力します: [foo, bar, baz].

それらを取り除き、変数のみを出力するにはどうすればよいですか?

これまでの私のコード:

Stack myStack = new Stack ();

for(int j=0; j<arrayForVar.length; j++) {
    if(arrayForVar[j][1] != null) {
        System.out.printf("%s \n", arrayForVar[j][1] + "\n");
        myStack.push(arrayForVar[j][1]);
    }
}

System.out.printf("%s \n", myStack.toString());

この答えは私のために働いた:

toStringスタックでメソッドを使用し、メソッドを使用replaceAllして角括弧のすべてのインスタンスを空白文字列に置き換えます。このような:

System.out.print(
    myStack.toString().replaceAll("\\[", "").replaceAll("]", ""));
4

10 に答える 10

14

回避策があります。

それを配列に変換してから、次のように出力できますArrays.toString(Object[])

System.out.println(Arrays.toString(myStack.toArray()));

于 2012-08-28T13:36:40.510 に答える
2

スタックを埋めるために使用したのと同じ種類のループを使用し、個々の要素を好みに合わせて出力します。の動作を変更する方法はありませんがtoString、 をサブクラス化する方法Stackはお勧めしません。のソースコードがStackあなたの管理下にある場合は、toStringそこの実装を修正してください。

于 2012-08-28T13:24:08.443 に答える
0

のtoString()メソッドのドキュメントからAbstractCollectionStackしたがって、独自に定義するか、繰り返してカスタムtoString()を実装しない限り、これを行うことはできません。Stack

public String toString()

このコレクションの文字列表現を返します。文字列表現は、コレクションの要素のリストで構成され、イテレータによって返される順序で、角かっこ( "[]")で囲まれています。隣接する要素は、文字「、」(コンマとスペース)で区切られます。要素は、String.valueOf(Object)によって文字列に変換されます。

この実装は、空の文字列バッファーを作成し、左角括弧を追加し、コレクションを繰り返して、各要素の文字列表現を順番に追加します。最後を除く各要素を追加した後、文字列「、」が追加されます。最後に右角かっこが追加されます。文字列は文字列バッファから取得され、返されます。

于 2012-08-28T13:28:43.683 に答える
0

ここでプールに提案を投げます。スタックの実装によっては、これが可能な場合と不可能な場合があります。

提案は、この特定のケースで toString() をオーバーライドするための匿名内部クラスです。これは、Marko が言及しているサブクラス化をローカルに実装する 1 つの方法です。スタックのインスタンス化は次のようになります

Stack s = new Stack(){
              public String toString(){
                 // query the elements of the stack, build a string and
                 return nicelyFormattedString;
              }
          };
...
于 2012-08-28T13:33:24.260 に答える