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

反转字符串中奇数长度单词遇异常,求代码排查及解决方案

问题排查与解决方案

错误原因分析

你的代码存在两个核心问题:

  1. 全局StringBuilder导致整体反转混乱:你使用了静态全局的sb,每次调用reverse()时会反转整个sb中已拼接的所有内容,而非仅反转当前处理的单词。比如处理完"One"反转后得到"enO ",接着处理"Two"时append后变成"enO Two ",再反转就变成了" owT enO ",后续操作会持续打乱整体顺序,同时导致"Two"的反转效果被错误覆盖。
  2. 单词反转逻辑错误:"Two"长度为3(奇数)本应被反转,但由于全局sb的反转操作影响了整体顺序,导致它的反转效果被叠加抵消,最终表现为未反转。

修正后的代码

package QAIntvSprint;

import java.util.Arrays;

public class SecretAgent {
    public static void main(String[] args) {
        secretAgentII("One Two three Four");
    }

    static void secretAgentII(String s) {
        String[] arr = s.split(" ");
        // 使用局部StringBuilder,避免全局累积和整体反转问题
        StringBuilder resultSb = new StringBuilder();
        
        for (String word : arr) {
            if (word.length() % 2 == 0) {
                resultSb.append(word).append(" ");
            } else {
                // 为每个奇数长度的单词单独创建StringBuilder进行反转
                StringBuilder wordSb = new StringBuilder(word);
                resultSb.append(wordSb.reverse()).append(" ");
            }
        }
        // 去除末尾多余的空格后输出
        System.out.println(resultSb.toString().trim());
    }
}

修正说明

  • 改用局部StringBuilder:将结果容器改为方法内的局部变量,彻底避免全局状态带来的累积和意外反转问题。
  • 单独反转目标单词:对每个奇数长度的单词,新建独立的StringBuilder来反转该单词,再将反转结果拼接到结果容器中,确保仅反转当前单词,不影响已拼接的内容。
  • 清理末尾空格:用trim()方法移除最后一个单词后多余的空格,输出更整洁的结果。

运行修正后的代码,将得到预期输出:enO owT eerht Four

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:55:18