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
相关产品推荐
相关产品推荐

