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 回答
5
stack.forEach(System.out::println);

使用 Java 8 及更高版本的流函数

于 2019-07-23T19:23:57.950 回答
2

使用与填充堆栈并打印您喜欢的单个元素相同的循环。没有办法改变 的行为toString,除非你走子类化的路线Stack,我不建议这样做。如果源代码Stack在您的控制之下,那么只需修复toString那里的实现即可。

于 2012-08-28T13:24:08.443 回答
1

用于toArray()打印堆栈值

public void printStack(Stack<Integer> stack) {

    // Method 1:
    String values = Arrays.toString(stack.toArray());
    System.out.println(values);

    // Method 2:
    Object[] vals = stack.toArray();
    for (Object obj : vals) {
        System.out.println(obj);
    }
}
于 2016-09-16T21:32:08.373 回答
1

另一种方法是joinString 的方法,它类似于 Python 的 join 方法:

"" + String.join("/", stack)

这将返回包含堆栈所有元素的字符串,我们还可以通过传入第一个参数来添加一些分隔符。

示例:堆栈有两个元素 [home, abc]

然后这将返回“/home/abc”。

于 2020-06-11T07:08:38.353 回答
0

在这里向池中提出建议。根据您的 Stack 实现,这可能会也可能不会。

该建议是在这种特殊情况下覆盖 toString() 的匿名内部类。这是在本地实现 Marko 提到的子类化的一种方法。您的 Stack 实例化看起来像

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 回答
0

From documentation of toString() method of AbstractCollection. So you can not do it unless you define your own StackOr implement custom toString() by iterating over Stack

public String toString()

Returns a string representation of this collection. The string representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets ("[]"). Adjacent elements are separated by the characters ", " (comma and space). Elements are converted to strings as by String.valueOf(Object).

This implementation creates an empty string buffer, appends a left square bracket, and iterates over the collection appending the string representation of each element in turn. After appending each element except the last, the string ", " is appended. Finally a right bracket is appended. A string is obtained from the string buffer, and returned.

于 2012-08-28T13:28:43.683 回答
0
while(!myStack.isEmpty()) {
    System.out.print(myStack.pop());
}

您将打印堆栈的第一个元素并将其弹出,重复直到堆栈为空

于 2022-01-17T05:51:08.217 回答
-2

尝试这个:

 System.out.println(Arrays.asList(stackobject.toArray()));
 System.out.println(Arrays.toString(stackobject.toArray()));
于 2018-08-30T12:56:39.973 回答
-2
 Stack <String> Cars=new Stack();
 Cars.push("Lambo Urus");
    Cars.push("Honda Civic");
    Cars.push("Ford Mustang");

   while(!Cars.isEmpty()){
                System.out.println(Cars.pop());
            }
于 2022-01-14T21:53:42.187 回答