Java读取文本字符存入ArrayList传参后反转失效如何解决?
问题根因
- 未执行文件写入操作:代码仅读取了文件内容到内存的ArrayList、修改了内存中ArrayList的顺序,没有将修改后的内容写回
reverse.txt文件,原文件自然不会有变化,你代码中的PrintWriter相关逻辑全部被注释了。 - 返回值转换逻辑错误:
recursiveReverse方法中String.valueOf(str)的入参是ArrayList类型,不会直接拼接所有字符,最终得到的是ArrayList默认toString格式的字符串(带方括号、逗号分隔),如果需要使用返回值,该逻辑需要修正。 - 命名不规范(不影响功能):方法名带
recursive(递归),但实际用栈实现反转,和命名不符。
修复代码
驱动类修复(新增写入文件逻辑)
import java.util.Scanner; import java.io.*; import java.util.*; public class HelloPrinterDriver { public static void main(String[] args) throws FileNotFoundException { ArrayList<Character> list = new ArrayList<>(); File inputFile = new File("src/reverse.txt"); Scanner in = new Scanner(inputFile); in.useDelimiter(""); // 读取文件所有字符到ArrayList while(in.hasNext()) { char ch = in.next().charAt(0); list.add(ch); } in.close(); // 执行反转 String reverseResult = HelloPrinter.recursiveReverse(list); // 将反转后的内容写回文件 PrintWriter out = new PrintWriter("src/reverse.txt"); out.print(reverseResult); out.close(); } }
HelloPrinter类修复(修正字符串转换逻辑)
import java.util.*; public class HelloPrinter { public static String recursiveReverse(ArrayList<Character> str) { Stack<Character> st = new Stack<>(); for(int i=0; i<str.size(); i++) { st.push(str.get(i)); } for (int i=0; i<str.size(); i++) { str.set(i, st.pop()); } // 修正字符串拼接逻辑 StringBuilder sb = new StringBuilder(); for (Character ch : str) { sb.append(ch); } return sb.toString(); } // 可选:符合方法名的递归实现版本 public static String realRecursiveReverse(ArrayList<Character> str) { reverseHelper(str, 0, str.size()-1); StringBuilder sb = new StringBuilder(); for (Character ch : str) { sb.append(ch); } return sb.toString(); } private static void reverseHelper(ArrayList<Character> str, int left, int right) { if (left >= right) return; char temp = str.get(left); str.set(left, str.get(right)); str.set(right, temp); reverseHelper(str, left + 1, right - 1); } }
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

