在 Java 中打印堆栈值

问题描述 投票:0回答:12

在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());

这个答案对我有用:

在 Stack 上使用

toString
方法,并使用
replaceAll
方法将所有方括号实例替换为空白字符串。像这样:

System.out.print(
    myStack.toString().replaceAll("\\[", "").replaceAll("]", ""));
java stack
12个回答
15
投票

有一个解决方法。

您可以将其转换为数组,然后使用

Arrays.toString(Object[])
:

打印出来

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


7
投票
stack.forEach(System.out::println);

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


3
投票

使用

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);
    }
}

2
投票

使用与填充堆栈相同的循环并根据您的喜好打印各个元素。没有办法改变

toString
的行为,除非你走子类化
Stack
的路线,我不推荐这样做。如果
Stack
的源代码在您的控制之下,那么只需修复
toString
的实现即可。


1
投票

另一种方法是String的

join
方法,类似于Python的join方法:

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

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

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

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


0
投票

来自

AbstractCollection
的 toString() 方法的文档。所以你不能这样做,除非你定义自己的
Stack
或者通过迭代实现自定义 toString()
Stack

公共字符串 toString()

返回此集合的字符串表示形式。字符串表示形式由集合元素的列表组成,这些元素按其迭代器返回的顺序排列,并括在方括号(“[]”)中。相邻元素由字符“,”(逗号和空格)分隔。元素通过 String.valueOf(Object) 转换为字符串。

此实现创建一个空字符串缓冲区,附加一个左方括号,然后迭代集合,依次附加每个元素的字符串表示形式。添加除最后一个元素之外的每个元素后,将添加字符串“,”。最后附加一个右括号。从字符串缓冲区中获取字符串并返回。


0
投票

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

在这种特殊情况下,建议使用一个匿名内部类来重写 toString() 。这是 Marko 提到的本地实现子类化的一种方法。您的堆栈实例化看起来像这样

Stack s = new Stack(){
              public String toString(){
                 // query the elements of the stack, build a string and
                 return nicelyFormattedString;
              }
          };
...

0
投票
while(!myStack.isEmpty()) {
    System.out.print(myStack.pop());
}

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


0
投票

使用字符串生成器

StringBuilder result = new StringBuilder()
while(!myStack.isEmpty())result.append(myStack.pop());
System.out.print(result.reverse().toString())

0
投票

因为我们喜欢想象堆栈从从上到下,我觉得这有助于打印堆栈而不丢失堆栈中的值:)

public void printStack(Stack<Integer> s) {
    System.out.print("------ stack start ------\n");
    printStackRecursion(s);
    System.out.print("------ stack end ------\n\n");
}

public void printStackRecursion(Stack<Integer> s) {
    if (s.empty()) return;
    int x = s.peek();
    s.pop();
    System.out.println(x);
    printStackRecursion(s);
    s.push(x);
}

参考:https://www.geeksforgeeks.org/print-stack-elements-from-top-to-bottom/


-2
投票

试试这个:

 System.out.println(Arrays.asList(stackobject.toArray()));
 System.out.println(Arrays.toString(stackobject.toArray()));

-3
投票
 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());
            }
© www.soinside.com 2019 - 2024. All rights reserved.