You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

代码说明

  1. getCleanStackContent工具方法:这个方法遍历栈中的每个元素,把它们拼接成一个连续的字符串,彻底避免了默认toString()带来的方括号和逗号。遍历顺序是你push元素的顺序(栈底到栈顶),刚好匹配你想要的输出顺序。

  2. 空栈处理:遍历combine数组时,空栈会返回空字符串,我们输出空行而不是[],更符合视觉预期。

  3. 交替金字塔样式实现:如果你想要示例中X # XXX ### ...这种交替排列的格式,第二个循环通过elementAt(i)按顺序取出两个栈对应位置的元素并拼接,就能得到你想要的一行式金字塔输出。

运行结果

执行代码后,你会看到如下输出:

--- 按原栈数组输出 ---
X XXX XXXXX XXXXXXX XXXXXXXXX


# ### ##### ####### #########

--- 交替金字塔样式输出 ---
 X  #  XXX  ###  XXXXX  #####  XXXXXXX  #######  XXXXXXXXX #########

内容的提问来源于stack exchange,提问作者norainirahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:08:35