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

Java如何打印字符串中每隔一个的单词且首字母大写,求代码优化方案

Java代码优化方案

需求说明

输入一个字符串,提取其中奇数下标(从0开始计数)的单词,输出结果首字母大写。示例:

输入字符串: Hello how are you doing today?
输出结果: How you today?

现有代码问题梳理

  • 字符串拼接使用+运算符,每次操作都会生成新的String对象,长文本场景下性能损耗明显
  • skipWords方法中else分支的replace逻辑完全冗余,不需要处理不需要保留的单词,直接跳过即可
  • 拼接逻辑会导致最终结果末尾多一个多余空格
  • 首字母大写方法没有做边界校验,如果输入空字符串会触发索引越界异常

基于StringBuilder的优化实现

import java.util.Scanner;

public class Main {
    // 提取奇数下标单词
    public String skipWords(String str) {
        StringBuilder sb = new StringBuilder();
        String[] wordsArr = str.split(" ");
        // 直接从下标1开始,步长为2遍历,不需要额外判断奇偶
        for (int i = 1; i < wordsArr.length; i += 2) {
            // 不是第一个单词的话前面加空格,避免末尾多余空格
            if (sb.length() > 0) {
                sb.append(" ");
            }
            sb.append(wordsArr[i]);
        }
        return sb.toString();
    }

    // 首字母大写,增加边界校验
    public String fCapital(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }

    public static void main(String[] args) {
        Main obj = new Main();
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter a string: ");
        String str = sc.nextLine();
        String w = obj.skipWords(str);
        String result = obj.fCapital(w);
        System.out.println("The resulting string is: ");
        System.out.println(result);
    }
}

优化收益

  • 字符串拼接效率大幅提升,StringBuilder是可变字符序列,不会频繁生成新对象
  • 逻辑更简洁,去掉了冗余的奇偶判断和无用的replace操作
  • 修复了末尾多余空格、空输入异常等潜在问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:45:02