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

Java字符排序问题:含空格输入仅处理首个单词的技术求助

解决Java读取带空格输入并按字母排序的问题

嘿,我来帮你搞定这个问题!你遇到的核心问题其实不是空格处理的代码,而是输入读取的方式不对——咱们一步步来看:

问题根源

你用了scanner.next()来读取输入,这个方法的特性是只读取到第一个空格就停止,所以当你输入cba fed时,程序实际上只拿到了cba,后面的空格和fed根本没被读进来,那你写的空格处理代码自然就没机会生效啦。

修复步骤

1. 读取整行输入

把scanner.next()换成scanner.nextLine(),这样就能获取用户输入的整行内容,包括空格在内:

StringBuilder input = new StringBuilder(scanner.nextLine());

2. 正确处理空格(避免索引错位)

原来的循环里,当你删除空格字符时,input.deleteCharAt(i)会让后面的字符前移一位,但循环的i++会让你跳过下一个字符(比如连续空格的情况)。所以需要调整循环逻辑,手动控制索引:

for (int i = 0; i < input.length(); ) { // 这里去掉自动i++,手动控制
    if (Character.isWhitespace(input.charAt(i))) {
        input.deleteCharAt(i);
        // 删除后不递增i,因为下一个字符已经移到了当前i的位置
    } else {
        alpha.add(input.charAt(i));
        i++; // 只有没删除字符时才递增索引
    }
}

修改后的完整代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class SortAlphabetically {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Character> alpha = new ArrayList<Character>();
        
        System.out.println("Enter a word or phrase");
        StringBuilder input = new StringBuilder(scanner.nextLine()); // 改用nextLine()读取整行
        scanner.close();
        
        for (int i = 0; i < input.length(); ) {
            if (Character.isWhitespace(input.charAt(i))) {
                input.deleteCharAt(i);
            } else {
                alpha.add(input.charAt(i));
                i++;
            }
        }
        
        alpha.sort(null);
        System.out.println("Input sorted alphabetically: " + alpha);
    }
}

测试验证

当你输入cba fed时,程序会输出:

Input sorted alphabetically: [a, b, c, d, e, f]

完美解决了你的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:44