如何在文本文件的指定行中替换指定单词?
实现指定行内的单词替换(Java)
你的现有代码是直接替换整个文件中匹配的整行内容,要实现指定行内替换目标单词,核心思路是逐行处理文件内容,仅对目标行执行单词替换,其他行保持不变。
修改后的代码示例
try { File f = new File("bookingDetails.txt"); Scanner input = new Scanner(f); StringBuilder bd = new StringBuilder(); // 获取用户输入:目标行号(建议从1开始计数)、旧单词、新单词 int targetLine = Integer.parseInt(jTextField4.getText()); // 新增行号输入框 String oldWord = jTextField3.getText(); String newWord = jTextField1.getText(); int currentLine = 1; while(input.hasNextLine()) { String line = input.nextLine(); // 判断是否是目标行,是则替换该行内的单词 if(currentLine == targetLine) { // 替换该行内所有匹配的旧单词,若只需替换第一个用replaceFirst line = line.replace(oldWord, newWord); } bd.append(line + "\n"); currentLine++; } input.close(); FileWriter fw = new FileWriter(f); fw.append(bd.toString()); fw.flush(); fw.close(); // 记得关闭流 } catch(NumberFormatException ex) { // 处理行号输入不是数字的情况 System.out.println("请输入有效的行号"); } catch(Exception ex) { ex.printStackTrace(); }
关键说明
- 行号处理:新增行号输入框让用户指定要修改的行(示例中用
jTextField4),行号从1开始计数更符合用户习惯,循环中用currentLine跟踪当前读取的行号。 - 逐行替换:仅在读取到目标行时,对该行执行单词替换,其他行直接原样写入。
- 替换范围:使用
line.replace(oldWord, newWord)会替换该行内所有匹配的旧单词,如果只需要替换该行第一个匹配项,改用line.replaceFirst(oldWord, newWord)即可。 - 流的关闭:补充了
fw.close()确保文件流正确关闭,避免资源泄漏。
示例验证
原文本:
Kent:23:Male:Chief Jacob:25:Male:Plumber
输入:目标行号1,旧单词Male,新单词Female,执行后输出:
Kent:23:Female:Chief Jacob:25:Male:Plumber
完美实现指定行内的单词替换,不会影响其他行的内容。
内容的提问来源于stack exchange,提问作者Eruri
相关产品推荐
相关产品推荐

