Java程序实现首尾单词交换及中间字符反转的代码修正
Java程序修正:交换首尾单词并按要求处理中间部分
任务要求回顾
- 交换句子的首尾单词
- 首尾单词之间的部分需先反转单词顺序,再反转每个单词的字符
- 约束规则:
- 句子单词数量必须大于2,否则输出
Invalid Length - 句子只能包含英文字母和空格,否则输出
[输入句子] is an invalid sentence
- 句子单词数量必须大于2,否则输出
原代码问题分析
原代码仅实现了对中间每个单词的字符反转,但遗漏了先反转中间单词整体顺序的核心步骤,导致输入Do you wear your mask时输出不符合预期。
修正后的完整代码
import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.regex.Pattern; public class SentenceProcessor { private static final Pattern VALID_SENTENCE_PATTERN = Pattern.compile("^[a-zA-Z\\s]+$"); public static void main(String[] args) { String input = "Do you wear your mask"; processSentence(input); } public static void processSentence(String sentence) { // 验证句子合法性 if (!VALID_SENTENCE_PATTERN.matcher(sentence).matches()) { System.out.printf("%s is an invalid sentence%n", sentence); return; } // 分割单词并过滤空字符串(处理连续空格情况) String[] words = sentence.trim().split("\\s+"); if (words.length <= 2) { System.out.println("Invalid Length"); return; } // 提取首尾单词和中间单词列表 String firstWord = words[0]; String lastWord = words[words.length - 1]; List<String> middleWords = Arrays.asList(Arrays.copyOfRange(words, 1, words.length - 1)); // 第一步:反转中间单词的整体顺序 Collections.reverse(middleWords); // 第二步:反转每个中间单词的字符 StringBuilder processedMiddle = new StringBuilder(); for (String word : middleWords) { processedMiddle.append(new StringBuilder(word).reverse()).append(" "); } // 拼接最终结果 String result = String.format("%s %s%s", lastWord, processedMiddle.toString().trim(), firstWord); System.out.println(result); } }
关键步骤说明
- 合法性验证:用正则表达式
^[a-zA-Z\\s]+$严格校验输入内容,确保仅含字母和空格 - 单词处理:通过
trim()和\\s+分割单词,避免连续空格产生空元素 - 中间部分核心处理:
- 先调用
Collections.reverse()反转中间单词的顺序(例如you wear your变为your wear you) - 再对每个反转后的单词单独反转字符(例如
your变为ruoy,wear变为raew)
- 先调用
- 结果拼接:按「尾单词 + 处理后的中间部分 + 首单词」的格式组合最终句子
测试示例
输入:Do you wear your mask
输出:mask ruoy raew uoy Do
内容的提问来源于stack exchange,提问作者MARTIN
相关产品推荐
相关产品推荐

