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

Java字母排序输出异常排查:代码逻辑是否正确?ArrayList更优吗?

问题解答

1. 正确对用户输入字符串进行字母排序的方法

要实现正确的字母排序,需按以下步骤处理:

  • 输入预处理:读取逗号分隔的字符串后,拆分每个元素并清理首尾空白(空格、制表符等),避免空白字符干扰排序逻辑。
  • 执行排序:使用大小写不敏感的排序规则(如String.CASE_INSENSITIVE_ORDER),保证排序结果符合日常字母顺序习惯。
  • 输出结果:遍历排序后的集合或数组,跳过空元素后逐个打印。

2. 当前代码的逻辑问题及最后一个名称错误的原因

核心排序逻辑是正确的,但缺少输入预处理环节,这是导致最后一个名称异常的关键:

  • 若用户输入末尾带逗号(比如"Tom,Jerry,"),split(",")会生成空字符串作为最后一个元素,打印时出现空白行,看起来像"错误"。
  • 若名称前后带有空格(比如"Tom, Jerry ,Alice"),拆分后的元素包含空格(如" Jerry "),排序时空格ASCII值小于字母,会导致元素位置异常,或打印时显示多余空格。

修正后的代码(添加空白清理和空元素过滤):

import java.util.Arrays;
import java.util.Scanner;

public class SortNames {

    public static void main(String[] args) {
        System.out.println("Please enter a list of names delimited by commas: ");
        Scanner userInputScanner = new Scanner(System.in);
        String userInput = userInputScanner.nextLine();
        String[] userInputArray = userInput.split(",");
        
        // 清理每个元素的首尾空白
        for (int i = 0; i < userInputArray.length; i++) {
            userInputArray[i] = userInputArray[i].trim();
        }
        
        String[] listOrdered = displayListOrdered(userInputArray);
        for (String name : listOrdered) {
            // 过滤空字符串
            if (!name.isEmpty()) {
                System.out.println(name);
            }
        }
        userInputScanner.close();
    }

    public static String[] displayListOrdered(String[] inputArray) {
        Arrays.sort(inputArray, String.CASE_INSENSITIVE_ORDER);
        return inputArray;
    }
}

3. 使用ArrayList是否更优?

是否选择ArrayList取决于使用场景:

  • 仅需排序打印:当前数组实现足够高效,无需切换ArrayList,数组在内存占用和遍历效率上更直接。
  • 需动态操作(增删元素):ArrayList优势明显,支持动态扩容和丰富的集合操作(比如removeIf()直接过滤空元素)。示例代码:
import java.util.ArrayList;
import java.util.Scanner;

public class SortNamesWithArrayList {
    public static void main(String[] args) {
        System.out.println("Please enter a list of names delimited by commas: ");
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String[] splitNames = input.split(",");
        
        ArrayList<String> nameList = new ArrayList<>();
        for (String name : splitNames) {
            String trimmedName = name.trim();
            if (!trimmedName.isEmpty()) {
                nameList.add(trimmedName);
            }
        }
        
        nameList.sort(String.CASE_INSENSITIVE_ORDER);
        for (String name : nameList) {
            System.out.println(name);
        }
        scanner.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:42:52