繁体   English   中英

BufferedReader 跳过不以“#”开头的行

[英]BufferedReader skips lines not starting with '#'

我有以下构造:

    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开头的行中有一个断点,但是在调试时单步执行时,我注意到line never 是不以#开头的行之一。 这是为什么?

编辑:这里有一些更多的背景:

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);
}

文件中的相关行:

featuresBoot=config,ssh,management,kar,\
basit-core-domain,\
#basit-datasource-ecom,\
basit-connector-ecom,\
basit-datasource-talendmd,\
basit-connector-talendmd,\
basit-datasource-hybris,\
basit-connector-hybris,\
basit-connector-sap,\
basit-connector-jms,\
#basit-order-service,\
#basit-article-service,\
#basit-checkout-service,\
#basit-checkout-service,\
#basit-cart-service,\
basit-server-availability,\
#basit-address-service,\
#basit-user-service,\
basit-connector-atp-engine

BufferedReader 不会随意跳过行:

它具有经过十多年测试的非常具体的确定性行为。

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

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

一些非常基本的步骤调试会告诉你你需要知道什么。

在读取行后立即放置一个断点是您应该尝试的第一件事。

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

while ((necessaryComponentsFileLine = featuresConfigBufferedReader.readLine()) != null) {
// have you even tried to System.out.println(necessaryComponentsFileLine); ?
    }

无论如何,您的正则表达式不会匹配任何数据:

您的模式不正确,它不会匹配任何不是以至少1 or more whitespace characters开头的内容。

^\\s+basit-.+

^ 在行首断言位置

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

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

.+ 匹配任何字符(换行符除外) 量词:+ 一次和无限次之间,尽可能多次,根据需要回馈 [贪婪]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM