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

Walter Savitch Java教材作业:输入单词反转代码能否优化简化?

嘿,针对你在Walter Savitch的Java教材里遇到的单词顺序反转作业,我整理了几个比冗余写法更简洁的优化方案,你可以按需参考:

方案1:Java 8+ Stream API 简洁实现

这种写法利用Java 8引入的流API,代码简洁易读,还能处理输入中多余空格的情况:

import java.util.Arrays;
import java.util.stream.Collectors;

public class WordReverse {
    public static void main(String[] args) {
        String input = "Hello World Java Programming";
        // 分割单词,\\s+ 匹配任意数量的空白字符,trim()处理首尾空格
        String reversed = Arrays.stream(input.trim().split("\\s+"))
                                .collect(Collectors.toList())
                                .reversed()
                                .stream()
                                .collect(Collectors.joining(" "));
        System.out.println(reversed);
    }
}

优点:代码简洁,语义明确,适合现代Java开发场景;注意:需要Java 8及以上版本支持。

方案2:StringBuilder手动拼接(兼容性强)

如果需要兼容更早的Java版本,或者想更直观地控制拼接逻辑,手动遍历反转数组并使用StringBuilder拼接是个不错的选择:

public class WordReverse {
    public static void main(String[] args) {
        String input = "Hello World Java Programming";
        String[] words = input.trim().split("\\s+");
        StringBuilder result = new StringBuilder();
        
        for (int i = words.length - 1; i >= 0; i--) {
            result.append(words[i]);
            // 避免最后一个单词后多加空格
            if (i != 0) {
                result.append(" ");
            }
        }
        
        System.out.println(result.toString());
    }
}

优点:兼容性好(支持所有Java版本),执行效率高,逻辑清晰易懂。

方案3:利用Collections工具类反转列表

借助Java集合框架的工具类,也能快速实现需求,代码同样简洁:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class WordReverse {
    public static void main(String[] args) {
        String input = "Hello World Java Programming";
        List<String> wordList = Arrays.asList(input.trim().split("\\s+"));
        Collections.reverse(wordList);
        String reversed = String.join(" ", wordList);
        
        System.out.println(reversed);
    }
}

优点:借助成熟的工具类,代码量少,可读性强;注意:Arrays.asList返回的列表是固定大小的,但这里只做反转操作,不会修改列表长度,所以没问题。

额外提示

不管用哪种方案,都建议用trim()处理输入的首尾空格,并用\\s+作为分割符,这样可以避免输入中存在多个连续空格时出现空字符串的问题,让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:05:00