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
相关产品推荐
相关产品推荐

