Java字符串解析程序求助:已修复退出逻辑仍存在空格异常
Java字符串解析:修复空格异常与退出逻辑问题
问题分析
你的代码存在两个核心问题:
- 退出逻辑完全失效:
userInput.equalsIgnoreCase("q")的判断被放在最后一个else if分支,但前面的contains(",")和!contains(",")已经覆盖了所有输入场景,导致退出指令永远不会被触发。 - 输出空格异常:
- 输出格式不一致:"First word: "带两个空格,"Second word:"无空格,导致内容对齐混乱。
- 输入中逗号前后的空格会被保留在split结果里,比如输入
"hello, world"时,第二个输出会是" world"(带前置空格)。 - 重复调用
split(","),既冗余又影响效率。
修复后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); while (true) { System.out.println("Enter input string: "); String userInput = scan.nextLine(); // 优先处理退出请求 if (userInput.equalsIgnoreCase("q")) { break; } if (userInput.contains(",")) { // 只调用一次split,结果存入数组 String[] parts = userInput.split(","); // 用trim()去除前后空格,统一输出格式 System.out.println("First word: " + parts[0].trim()); System.out.println("Second word: " + parts[1].trim()); System.out.println(); } else { System.out.println("Error: No comma in string"); } } } }
关键修改说明
- 调整退出逻辑顺序:将退出判断移到循环最开始,确保用户输入
q或Q时能直接退出程序。 - 优化split调用:只执行一次
split(",")并将结果存入数组,避免重复解析字符串。 - 去除冗余空格:对split后的每个部分调用
trim(),自动清除输入中逗号前后的空格(包括空格、制表符等空白字符)。 - 统一输出格式:将"First word"和"Second word"后的空格统一为1个,保证输出对齐美观。
- 简化分支结构:去掉多余的
else if (!userInput.contains(",")),直接用else承接无逗号的情况,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Ashley
相关产品推荐
相关产品推荐

