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

Java大小写字母交替排序程序测试失败,求修正方案

字符串大小写交替有序排序问题分析与修复

问题描述

需求:将包含大小写字母的字符串按大小写交替且各自有序的方式排序,输入示例HelLoWoRld,预期输出HdLeRlWloo。现有Java代码仅通过3/8测试用例,需排查问题并给出正确实现。

现有代码:

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

public class SortDriver {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the String: ");
        String input = scanner.nextLine();
        String sortedString = sortString(input);
        System.out.println("The Sorted String is: " + sortedString);
    }

    public static String sortString(String str) {
        StringBuilder sorted = new StringBuilder();

        // Separate lowercase and uppercase letters
        StringBuilder lower = new StringBuilder();
        StringBuilder upper = new StringBuilder();
        for (char ch : str.toCharArray()) {
            if (Character.isLowerCase(ch)) {
                lower.append(ch);
            } else if (Character.isUpperCase(ch)) {
                upper.append(ch);
            }
        }

        // Sort the lowercase and uppercase letters
        char[] lowerChars = lower.toString().toCharArray();
        char[] upperChars = upper.toString().toCharArray();
        Arrays.sort(lowerChars);
        Arrays.sort(upperChars);

        // Merge the sorted lowercase and uppercase letters alternately
        int i = 0, j = 0;
        while (i < lowerChars.length || j < upperChars.length) {
            if (i < lowerChars.length) {
                sorted.append(lowerChars[i++]);
            }
            if (j < upperChars.length) {
                sorted.append(upperChars[j++]);
            }
        }

        return sorted.toString();
    }
}

现有代码的问题分析

  • 合并顺序完全颠倒:需求的交替逻辑是先大写,后小写循环交替(如示例的H→d→L→e...),但代码是先添加小写字符,再添加大写字符,导致输出顺序与预期完全相反。
  • 交替轮次逻辑错误:当前逻辑会按"小写→大写"的顺序交叉添加,起始方向不符合要求,最终输出结构与需求的大小写交替模式不匹配。

注:代码中分离大小写、各自排序的逻辑是正确的,问题仅出在合并阶段。

正确实现方案

修正合并阶段的逻辑,遵循先大写、后小写的交替顺序,当其中一组字符耗尽后,直接追加另一组剩余的所有字符。

修正后的完整代码:

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

public class SortDriver {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the String: ");
        String input = scanner.nextLine();
        String sortedString = sortString(input);
        System.out.println("The Sorted String is: " + sortedString);
    }

    public static String sortString(String str) {
        StringBuilder sorted = new StringBuilder();

        // Separate lowercase and uppercase letters
        StringBuilder lower = new StringBuilder();
        StringBuilder upper = new StringBuilder();
        for (char ch : str.toCharArray()) {
            if (Character.isLowerCase(ch)) {
                lower.append(ch);
            } else if (Character.isUpperCase(ch)) {
                upper.append(ch);
            }
        }

        // Sort the lowercase and uppercase letters
        char[] lowerChars = lower.toString().toCharArray();
        char[] upperChars = upper.toString().toCharArray();
        Arrays.sort(lowerChars);
        Arrays.sort(upperChars);

        // Merge with correct alternate order: uppercase first, then lowercase
        int lowerIdx = 0, upperIdx = 0;
        while (lowerIdx < lowerChars.length || upperIdx < upperChars.length) {
            // Add uppercase character if available
            if (upperIdx < upperChars.length) {
                sorted.append(upperChars[upperIdx++]);
            }
            // Add lowercase character if available
            if (lowerIdx < lowerChars.length) {
                sorted.append(lowerChars[lowerIdx++]);
            }
        }

        return sorted.toString();
    }
}

测试验证

针对输入HelLoWoRld:

  1. 分离后小写字符为e,l,o,o,l,d,排序后为d,e,l,l,o,o
  2. 分离后大写字符为H,L,W,R,排序后为H,L,R,W
  3. 合并过程:H→d→L→e→R→l→W→l→o→o,最终输出HdLeRlWloo,与预期一致。

额外说明

如果需求中交替的起始方向(先大写/先小写)需要动态调整,可根据两组字符的数量决定:哪组数量多就从哪组开始,但根据示例要求,固定先大写即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:32:46