Java递归实现句子按单词倒序输出功能存在逻辑错误求助
递归倒序单词问题修复方案
核心错误点
原writeBackward方法存在以下逻辑问题导致无法实现倒序效果:
- 递归执行顺序错误:原代码先打印当前首个单词,再递归处理剩余字符串,最终输出为正序;倒序需要先递归处理剩余部分,再输出当前单词
- 未兼容末尾单词边界:当字符串只剩最后一个单词时,
s.indexOf(" ")会返回-1,原代码未处理该场景,会触发字符串下标越界异常 - 修剪操作无效:
output.trim()未重新赋值给变量,空格修剪逻辑不生效 - 剩余字符串截取逻辑错误:原代码截取剩余字符串时保留了单词后的空格,会导致后续处理出现冗余空格、空匹配等问题
- 方法调用不兼容:
toFile为非静态方法,无法直接在静态的fromFile/main方法中调用,且原递归逻辑直接打印结果,未拼接成完整字符串用于输出到文件
修复后完整代码
import java.util.StringTokenizer; import java.io.*; public class Recursion { public static void main (String[] args) { System.out.println("Starting program..."); System.out.println("\nFirst Line:"); fromFile(); } // 修改为返回倒序拼接后的字符串 public static String writeBackward(String s) { s = s.trim(); // 递归终止条件:空字符串直接返回 if (s.isEmpty()) { System.out.println("Base Case is executed. Done."); return ""; } int spaceIndex = s.indexOf(" "); // 边界处理:当前是最后一个单词,直接返回 if (spaceIndex == -1) { return s; } String firstWord = s.substring(0, spaceIndex).trim(); String restStr = s.substring(spaceIndex + 1).trim(); // 先递归处理剩余字符串,再拼接当前单词,实现倒序 return writeBackward(restStr) + " " + firstWord; } // 修改为静态方法,修改输出文件名避免覆盖输入文件 public static void toFile(String output) { try { String outPutFile = "output.txt"; FileWriter fileWrite = new FileWriter(outPutFile, true); // 追加模式支持多行输出 BufferedWriter buffWrite = new BufferedWriter(fileWrite); PrintWriter outFile = new PrintWriter(buffWrite); outFile.println(output); buffWrite.flush(); buffWrite.close(); } catch(IOException exception) { System.out.println(exception.getMessage()); } } public static void fromFile() { try { String temp; String inPutFile = "input.txt"; String line = ""; StringTokenizer inLine; FileReader fRead = new FileReader(inPutFile); BufferedReader bRead = new BufferedReader(fRead); line = bRead.readLine(); while(line != null) { temp = line; System.out.println("原句子:" + temp); String reversedLine = writeBackward(temp); System.out.println("倒序后句子:" + reversedLine); // 写入输出文件 toFile(reversedLine); line = bRead.readLine(); } bRead.close(); } catch(IOException exception) { System.out.println(exception.getMessage()); } } }
实现说明
- 递归逻辑调整为:每次拆分出当前句子的首个单词后,优先递归处理剩下的所有单词,等递归返回后再拼接当前首个单词,最终整体实现单词倒序效果
- 新增末尾单词边界处理,避免下标越界问题
toFile修改为追加模式,支持输入文件多行内容分别倒序后输出- 输入输出文件分离,避免覆盖原始输入内容
内容的提问来源于stack exchange,提问作者Muskratis
相关产品推荐
相关产品推荐

