You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取TXT文件无法识别指定字符串问题求助

问题分析与解决

首先看你写的代码,有个明显的逻辑错误:在while循环里,每次先读一行到s,判断后又调用了s=b.readLine(),这会导致跳过一行内容。比如假设目标行是第2行,第一次循环读第1行,不匹配,然后读第2行;第二次循环直接读第3行进行判断,这就跳过了第2行的检查,自然找不到目标字符串。

除了代码逻辑问题,还有这些可能的原因:

  • 文件编码不匹配:FileReader默认使用系统默认编码,如果你的TXT文件是UTF-8带BOM、GBK等其他编码,读出来的字符串可能包含隐藏字符,导致contains匹配失败。
  • 目标字符串有隐藏空格/特殊字符:比如文件里的括号是全角(),或者字符串中间有空格、制表符,看起来是(GmmiVariables)实际是( GmmiVariables )或者带不可见字符,直接用contains就匹配不上。

修正后的代码示例

先修复循环逻辑,再处理编码和可能的特殊字符问题:

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        // 指定UTF-8编码读取文件,避免编码不兼容问题
        BufferedReader b = new BufferedReader(new InputStreamReader(new FileInputStream("QD48.txt"), "UTF-8"));
        String s;

        while ((s = b.readLine()) != null) {
            // 先去除前后空格,再替换中间所有空白字符,再判断匹配
            String processedLine = s.trim().replaceAll("\\s+", "");
            if (processedLine.contains("(GmmiVariables)")) {
                System.out.println("找到目标行:" + s);
            }
        }
        b.close();
    }
}

删除目标字符串的完整逻辑

如果要删除文件中的(GmmiVariables)字符串,建议采用读取原文件内容,过滤后写入新文件的方式(直接修改原文件容易出现数据损坏):

import java.io.*;

public class RemoveTargetString {
    public static void main(String[] args) throws IOException {
        String inputFile = "QD48.txt";
        String outputFile = "QD48_modified.txt";
        String targetStr = "(GmmiVariables)";

        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile), "UTF-8"));
             BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"))) {

            String line;
            while ((line = reader.readLine()) != null) {
                // 替换掉目标字符串后写入新文件
                String modifiedLine = line.replace(targetStr, "");
                writer.write(modifiedLine);
                writer.newLine();
            }
        }
        System.out.println("处理完成,新文件已生成:" + outputFile);
    }
}

如果还是匹配不上,可以把读出来的行打印成字符ASCII码,排查隐藏字符:

for (char c : s.toCharArray()) {
    System.out.print((int)c + " ");
}
System.out.println();

对比目标字符串"(GmmiVariables)"每个字符的ASCII码,就能找出差异。

内容的提问来源于stack exchange,提问作者Roberto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:33:34