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

