Java BufferedReader跳过不以'#';

Java BufferedReader跳过不以'#';,java,regex,Java,Regex,我有以下结构: BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(CFG_FILE))); String line; while ((line = bufferedReader.readLine()) != null) { if (line.matches(PATTERN)) {

我有以下结构:

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(CFG_FILE)));

    String line;
while ((line = bufferedReader.readLine()) != null) {
                if (line.matches(PATTERN)) {
                    //do something
}}
我正在读取的文件如下所示:

test1,\
test2,\
test3,\
#test4,\
#test5,\
test6,\
#test7,\
test8
我在以
if
开头的行中有一个断点,但是在调试过程中,我注意到
决不是以
开头的行之一。为什么呢

编辑:以下是更多的上下文:

private static final String BASIT_PATTERN = "^\\s+basit-.+";

ArrayList<String> featuresConfigEntries = new ArrayList<>();

try {
    BufferedReader featuresConfigBufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(FEATURES_CFG)));

    String necessaryComponentsFileLine;

    while ((necessaryComponentsFileLine = featuresConfigBufferedReader.readLine()) != null) {
        if (necessaryComponentsFileLine.matches(BASIT_PATTERN)) {
            final String[] splitNecessaryComponentsFileLine = necessaryComponentsFileLine.split(",");
            for (String necessaryComponentString : splitNecessaryComponentsFileLine) {
                if (necessaryComponentString.matches(BASIT_PATTERN)) {
                    featuresConfigEntries.add(necessaryComponentString.replaceAll("\\s+", "").trim());
                }
            }
        }
    }
} catch (FileNotFoundException e) {
    LOGGER.error("File not found: " + FEATURES_CFG, e);
} catch (IOException e) {
    LOGGER.error("Failed reading file: " + FEATURES_CFG, e);
}
BufferedReader不会任意跳过行: 它具有非常特定的确定性行为,已经测试了十多年

您的输入文件不包含您认为的内容

如果您读取行时,它正在“跳过”行,则这些行没有相应的
EOL
标记,并且正在与下一行或上一行连接

一些非常基本的步骤调试将告诉您需要了解的内容。 在读取行之后放置断点是您应该尝试的第一件事

可怕的调试日志也会告诉你同样的事情

while ((necessaryComponentsFileLine = featuresConfigBufferedReader.readLine()) != null) {
// have you even tried to System.out.println(necessaryComponentsFileLine); ?
    }
您的正则表达式无论如何都不会匹配任何该数据: 您的模式不正确,它将不匹配任何不以至少
1个或多个空白字符开头的字符

^在行首断言位置

\s+匹配任何空白字符[\r\n\t\f]量词:+介于 一次,无限次,尽可能多地回馈 需要[贪婪]

basit-匹配字符basit-字面意思(区分大小写)

.+匹配任何字符(除换行符外)限定符:+1 无限的时间,尽可能多的时间,根据需要回馈 [贪婪的]


这不应该发生……每一行都应该被读取……我非常怀疑这与
BufferedReader
有关。请发布一个简短但完整的程序来演示这个问题。(我怀疑这是你的模式错误和调试器中的错误混合造成的。)如果没有看到你试图匹配的
模式,这绝对是无用的,完成的前提是不满足我添加了更多的代码。我的断点在if所在的行中。这意味着,每一行不以#开头都返回一个空字符串,对吗?为什么?这个模式不相关,因为这个问题以前似乎发生过,但我要补充一下。谢谢!我修复了模式,但这并不能解决我的问题,因为某些行甚至无法到达模式。。。
while ((necessaryComponentsFileLine = featuresConfigBufferedReader.readLine()) != null) {
// have you even tried to System.out.println(necessaryComponentsFileLine); ?
    }