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

如何将字符串NyffsGeyylB转换为指定格式?现有Java代码需修正

问题描述

现有字符串:

String s = "NyffsGeyylB";

需要转换为指定格式的结果:

String result = "N-Yy-Fff-Ffff-Sssss-Gggggg-Eeeeeee-Yyyyyyyy-Yyyyyyyyy-Llllllllll-Bbbbbbbbbbb";

当前代码运行后得到的错误结果:

"N-Yy-Fffffff-Sssss-Gggggg-Eeeeeee-Yyyyyyyyyyyyyyyyy-Llllllllll-Bbbbbbbbbbb"

错误原因

核心问题出在段的合并逻辑:你把所有字符的重复项合并到一个列表后,仅通过字符是否相同来判断是否加分隔符,这会把原字符串中连续的相同字符(比如第3、4位的f,第8、9位的y)对应的独立重复段合并成一个,但需求中每个原字符都要作为独立的段,即使字符相同。

另外,HashMap的遍历顺序不确定(除非用LinkedHashMap),但这不是主要问题,关键是错误地将同字符的不同段合并了。

修改后的代码方案

直接逐个处理原字符串的每个字符,生成对应长度的独立段,再拼接成结果:

String s = "NyffsGeyylB";
StringBuilder finalResult = new StringBuilder();

for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    int repeatCount = i + 1; // 每个段的长度等于当前字符的位置序号(从1开始)
    // 生成单个段:首字母大写,其余小写
    StringBuilder segment = new StringBuilder();
    segment.append(Character.toUpperCase(c));
    for (int j = 1; j < repeatCount; j++) {
        segment.append(Character.toLowerCase(c));
    }
    // 拼接段,第一个段前不加'-'
    if (i != 0) {
        finalResult.append("-");
    }
    finalResult.append(segment);
}

System.out.println(finalResult.toString());

代码说明

  1. 遍历原字符串时,每个字符对应一个独立段,段的长度为当前字符的位置序号(从1开始);
  2. 每个段的格式为「首字符大写 + 剩余长度的小写字符」;
  3. 用StringBuilder拼接所有段,除第一个段外,其余段前添加-分隔符;
  4. 运行后直接得到符合需求的结果:
N-Yy-Fff-Ffff-Sssss-Gggggg-Eeeeeee-Yyyyyyyy-Yyyyyyyyy-Llllllllll-Bbbbbbbbbbb

简化版实现(基于原代码结构调整)

如果不想完全重写,也可以先生成所有独立段,再用分隔符连接:

String s = "NyffsGeyylB";
List<String> segments = new ArrayList<>();

// 先生成每个独立段
for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    int count = i + 1;
    StringBuilder sb = new StringBuilder();
    sb.append(Character.toUpperCase(c));
    for (int j = 1; j < count; j++) {
        sb.append(Character.toLowerCase(c));
    }
    segments.add(sb.toString());
}

// 用'-'连接所有段
String finalResult = String.join("-", segments);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:30:43