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

