Java技术问询:打印Stack集合内容时如何去除方括号与逗号
解决Java栈输出格式问题:去除方括号与逗号并实现金字塔样式输出
嘿,我明白你的困扰了——直接打印Stack对象时,Java会默认调用它继承的Vector类的toString()方法,这就是输出里出现方括号和逗号的原因。要实现你想要的干净格式,我们需要手动遍历栈内元素并拼接成目标字符串,而不是直接打印整个栈实例。
原代码的问题所在
你当前的代码中,System.out.print(combine[i] + " ")直接打印了Stack对象,而Java的集合类默认toString()会生成[元素1, 元素2, ...]格式的字符串,空栈就会输出[],这完全不符合你的需求。
修改后的完整代码
下面是调整后的代码,既解决了格式问题,还提供了两种输出方式(对应你原代码的栈数组遍历,以及你想要的交替金字塔样式):
import java.util.Stack; public class StackPyramidOutput { public static void main(String[] args) { // 初始化栈A:存储X系列元素 Stack<String> stackA = new Stack<>(); stackA.push(" X "); stackA.push(" XXX "); stackA.push(" XXXXX "); stackA.push(" XXXXXXX "); stackA.push("XXXXXXXXX"); // 初始化栈F:存储#系列元素 Stack<String> stackF = new Stack<>(); stackF.push(" # "); stackF.push(" ### "); stackF.push(" ##### "); stackF.push(" ####### "); stackF.push("#########"); // 空栈保持不变 Stack<String> stackB = new Stack<>(); Stack<String> stackC = new Stack<>(); Stack<String> stackD = new Stack<>(); Stack<String> stackE = new Stack<>(); Stack<String>[] combine = new Stack[6]; combine[0] = stackA; combine[1] = stackB; combine[2] = stackC; combine[3] = stackD; combine[4] = stackE; combine[5] = stackF; // 方式1:按原数组遍历输出,空栈输出空行 System.out.println("--- 按原栈数组输出 ---"); for (Stack<String> stack : combine) { String formattedContent = getCleanStackContent(stack); System.out.println(formattedContent.isEmpty() ? "" : formattedContent); } // 方式2:实现你想要的交替金字塔样式输出 System.out.println("\n--- 交替金字塔样式输出 ---"); for (int i = 0; i < stackA.size(); i++) { // 按push顺序取出对应位置的元素并拼接 System.out.print(stackA.elementAt(i) + stackF.elementAt(i)); } System.out.println(); } /** * 工具方法:将栈元素拼接为无方括号、逗号的字符串 * @param stack 目标栈 * @return 格式化后的字符串 */ private static String getCleanStackContent(Stack<String> stack) { StringBuilder sb = new StringBuilder(); // 按push顺序遍历栈元素(栈底到栈顶) for (String item : stack) { sb.append(item); } // 去除首尾多余空格(可根据需求调整是否保留) return sb.toString().trim(); } }
代码说明
getCleanStackContent工具方法:这个方法遍历栈中的每个元素,把它们拼接成一个连续的字符串,彻底避免了默认toString()带来的方括号和逗号。遍历顺序是你push元素的顺序(栈底到栈顶),刚好匹配你想要的输出顺序。空栈处理:遍历
combine数组时,空栈会返回空字符串,我们输出空行而不是[],更符合视觉预期。交替金字塔样式实现:如果你想要示例中
X # XXX ### ...这种交替排列的格式,第二个循环通过elementAt(i)按顺序取出两个栈对应位置的元素并拼接,就能得到你想要的一行式金字塔输出。
运行结果
执行代码后,你会看到如下输出:
--- 按原栈数组输出 --- X XXX XXXXX XXXXXXX XXXXXXXXX # ### ##### ####### ######### --- 交替金字塔样式输出 --- X # XXX ### XXXXX ##### XXXXXXX ####### XXXXXXXXX #########
内容的提问来源于stack exchange,提问作者norainirahim
相关产品推荐
相关产品推荐

