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
相关产品推荐
相关产品推荐

