在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
方法用blankstring替换方括号的所有实例。像这样:
System.out.print(
myStack.toString().replaceAll("\\[", "").replaceAll("]", ""));
有一个解决方法。
您可以将其转换为数组,然后使用Arrays.toString(Object[])
打印出来:
System.out.println(Arrays.toString(myStack.toArray()));
使用与填充堆栈相同的循环并根据自己的喜好打印单个元素。没有办法改变toString
的行为,除非你走Stack
子类化的路线,我不推荐。如果Stack
的源代码在您的控制之下,那么只需修复toString
的实现。
使用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);
}
}
来自AbstractCollection
的toString()方法的文档。除非你通过迭代Stack
定义你自己的Stack
Or实现自定义toString(),所以你不能这样做
public String toString()
返回此集合的字符串表示形式。字符串表示由一个集合元素的列表组成,它们的迭代器返回它们的顺序,用方括号(“[]”)括起来。相邻元素由字符“,”(逗号和空格)分隔。通过String.valueOf(Object)将元素转换为字符串。
此实现创建一个空字符串缓冲区,附加左方括号,并迭代遍历每个元素的字符串表示形式的集合。在追加除最后一个元素之外的每个元素之后,附加字符串“,”。最后附加右括号。从字符串缓冲区获取字符串,然后返回。
在这里向游泳池投掷一个建议。根据您的Stack实现,这可能是也可能是不可能的。
该建议是一个匿名内部类,用于在这种特殊情况下覆盖toString()。这是本地实现Marko提到的子类化的一种方法。你的Stack实例化看起来像
Stack s = new Stack(){
public String toString(){
// query the elements of the stack, build a string and
return nicelyFormattedString;
}
};
...
试试这个:
System.out.println(Arrays.asList(stackobject.toArray()));
System.out.println(Arrays.toString(stackobject.toArray()));