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

Java控制台输入时如何消除换行,实现卡片式输出对齐?

Java卡片式布局中输入行右侧竖线缺失的解决方法

问题概述

编写了一个Java卡片式交互程序,提示用户选择颜色并输出对应信息,但输入颜色时会自动换行,导致输入行右侧竖线缺失,无法保持完整的卡片布局。

原代码

import java.util.Scanner;
public class Main{
    public static void main(String args[]) {
        Scanner cin = new Scanner(System.in);
        String color;
        
        System.out.println("------------------------------------------------------");
        System.out.println("|                  Welcome Card!!                    |");
        System.out.println("|                   Pick a color                     |");
        System.out.println("|                                                    |");
        System.out.println("|              Green, Blue, Red, Orange              |");
        System.out.println("|                                                    |");
        System.out.println("|                                                    |");
        System.out.print("|\t\t\t\t       "); color = cin.nextLine();
        
        switch (color.toLowerCase()){
            case "blue":
                System.out.println("|                    Success                         |");
                System.out.println("------------------------------------------------------");
                break;

            default:
                System.out.println("unsuccessful");
        }
        
        }
    }

当前输出

------------------------------------------------------
|                  Welcome Card!!                    |
|                   Pick a color                     |
|                                                    |
|              Green, Blue, Red, Orange              |
|                                                    |
|                                                    |
|                      blue
|                    Success                         |
------------------------------------------------------

期望输出

------------------------------------------------------
|                  Welcome Card!!                    |
|                   Pick a color                     |
|                                                    |
|              Green, Blue, Red, Orange              |
|                                                    |
|                                                    |
|                     blue                           |
|                    Success                         |
------------------------------------------------------

问题原因

当前代码在输出左侧|和前置空格后,直接调用cin.nextLine()读取用户输入,用户按下回车时控制台会自动换行,导致该行没有机会输出右侧的|,破坏了卡片的闭合布局。


解决方案

下面提供两种实现方式,可根据需求选择:

方式1:简单补全右侧竖线(固定排版)

适合输入内容长度固定的场景,直接在读取输入后补全右侧边框和对应空格:

import java.util.Scanner;
public class Main{
    public static void main(String args[]) {
        Scanner cin = new Scanner(System.in);
        String color;
        
        System.out.println("------------------------------------------------------");
        System.out.println("|                  Welcome Card!!                    |");
        System.out.println("|                   Pick a color                     |");
        System.out.println("|                                                    |");
        System.out.println("|              Green, Blue, Red, Orange              |");
        System.out.println("|                                                    |");
        System.out.println("|                                                    |");
        // 输出左侧边框和前置空格
        System.out.print("|\t\t\t\t       ");
        color = cin.nextLine();
        // 补全右侧边框,匹配卡片宽度
        System.out.println("                   |");
        
        switch (color.toLowerCase()){
            case "blue":
                System.out.println("|                    Success                         |");
                System.out.println("------------------------------------------------------");
                break;

            default:
                // 统一默认分支的卡片格式
                System.out.println("|                  Unsuccessful                      |");
                System.out.println("------------------------------------------------------");
        }
    }
}

方式2:动态居中对齐(适配任意输入长度)

如果需要让输入内容自动居中,适配不同长度的输入,可通过计算空格数实现:

import java.util.Scanner;
public class Main{
    public static void main(String args[]) {
        Scanner cin = new Scanner(System.in);
        String color;
        // 卡片内容区总长度(去掉前后的|)
        final int CONTENT_LENGTH = 60;
        
        System.out.println("------------------------------------------------------");
        System.out.println("|                  Welcome Card!!                    |");
        System.out.println("|                   Pick a color                     |");
        System.out.println("|                                                    |");
        System.out.println("|              Green, Blue, Red, Orange              |");
        System.out.println("|                                                    |");
        System.out.println("|                                                    |");
        
        // 输出左侧边框
        System.out.print("|");
        color = cin.nextLine();
        // 计算左右填充空格数,实现居中
        int leftPadding = (CONTENT_LENGTH - color.length()) / 2;
        int rightPadding = CONTENT_LENGTH - color.length() - leftPadding;
        
        // 输出左侧空格
        for (int i = 0; i < leftPadding; i++) {
            System.out.print(" ");
        }
        // 输出用户输入的颜色
        System.out.print(color);
        // 输出右侧空格和边框
        for (int i = 0; i < rightPadding; i++) {
            System.out.print(" ");
        }
        System.out.println("|");
        
        switch (color.toLowerCase()){
            case "blue":
                System.out.println("|                    Success                         |");
                System.out.println("------------------------------------------------------");
                break;

            default:
                System.out.println("|                  Unsuccessful                      |");
                System.out.println("------------------------------------------------------");
        }
    }
}

关键说明

  • 方式1操作简单,适合快速修复,但需要手动调整空格数保证对齐;
  • 方式2通过动态计算空格,能自动适配不同长度的输入,保持卡片布局始终整齐,扩展性更强;
  • 建议统一所有分支的输出格式,避免默认分支破坏整体卡片结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:48:28