Java startsWith String方法似乎工作不正常

Java startsWith String方法似乎工作不正常,java,string,startswith,Java,String,Startswith,我有一个Java程序,它用inputStream读取输入文件,用outputStream写入输出文件。该文件有以磅符号“#”开头的注释行,还包含空行。我试图让扫描器跳过这些行来获取实际信息。我无法硬编码要跳过的行数,因为输入文件可能会更改。以下是我所拥有的代码部分,我认为它可以满足我的需要: while (inputStream.hasNextLine()) { String line = inputStream.nextLine(); if (!(line.st

我有一个Java程序,它用inputStream读取输入文件,用outputStream写入输出文件。该文件有以磅符号“#”开头的注释行,还包含空行。我试图让扫描器跳过这些行来获取实际信息。我无法硬编码要跳过的行数,因为输入文件可能会更改。以下是我所拥有的代码部分,我认为它可以满足我的需要:

while (inputStream.hasNextLine()) {
        String line = inputStream.nextLine();
        if (!(line.startsWith("#")) || !(line.isEmpty())) {
            outputStream.println(line);
        }
    }
逻辑有问题吗?我认为,在这段代码中,只有那些不是空的或不是以磅符号开头的行才会写入我的输出文件,但是整个输入文件都会写入输出文件,包括注释行和空行。我的猜测是,我不太理解startsWith方法是如何正常工作的。欢迎任何建议,谢谢阅读

编辑

此处定义了inputStream:

Scanner inputStream = null;
try {
        inputStream = new Scanner(new FileInputStream(inputFile));
    }
    catch (FileNotFoundException e) {
        System.out.println("File TripPlanner4_Vehicles.txt was not found");
        System.out.println("or could not be opened.");
        System.exit(0);
    }
此外,这里是文本文件输入文件的开头:

# Ignore blank lines and comment lines (begins with pound sign '#')

# The vertical bar '|' is used as the field delimiter within each vehicle record

# Table of Vehicle Records
#   Column headings:
#     Type|Make|Model|Feature(s)|Engine Size (liters)|# Cyl|Fuel Type|Tank Size     (gallons)|City MPG|Hwy MPG|Towing?

Car|Chevrolet|Camaro||3.60|6|Unleaded|5.0|19|30|
Car|Chevrolet|Cruze||1.80|4|Unleaded|4.0|22|35|
Car|Chevrolet|Sonic||1.80|4|Unleaded|4.0|25|35|
编辑2

我已经想出了一种方法来满足我的需要,尽管这可能只适用于我正在使用的输入文件:

while (inputStream.hasNextLine()) {
        String line = inputStream.useDelimiter("|").nextLine();
        if (!line.contains("#") && (line.length() > 1)) { 
            outputStream.println(line);
        }
    }

这种方法会跳过其中包含“#”的行或空行,但是如果行中的任何位置包含“#”,则会跳过该行。我的输入文件只将这些放在行的开头,不在其他地方使用,因此它适用于我的案例。如果有人有更具活力的解决方案,欢迎分享。希望这能帮助其他类似情况的人。感谢所有回复并花时间提供帮助的人

使用
&&
而不是
|
。您需要的行不是空的,也不是以
#
开头

错误的操作员。更清楚的是:

while (inputStream.hasNextLine()) {
        String line = inputStream.nextLine();
        if (!(line.startsWith("#") || line.isEmpty())) {
            outputStream.println(line);
        }
}

这看起来像是英文的,不会给你带来任何可能的错误。

如果它不是以
#
开头,或者如果它不是空的,那么打印时应该有一个and there。

使用

 boolean startsWith= line.indexOf('#')==1;

在您假设
.startsWith(“#”)不起作用之前,我建议您单独测试它,而不是在
if
语句中进行测试…尝试大声读取if语句,如“如果此行以#开头或该行不是空的”您可以看到问题所在。我了解到,当使用字符串(“”)实现starsWith方法时,is将返回true,因此从技术上讲,每一行都以这个空字符串开头,我将如何跳过这个空字符串?这种方法仍然是将整个输入文件打印到输出文件。你有没有见过其他的方法来实现这一点,也许是使用与String类不同的方法?@user3015501:我想不起来。不过,这应该可以正常工作,您可以共享一个工作代码示例吗?我尝试只实现代码“String line=inputStream.nextLine();outputStream.println(line.startsWith(“#”)并且它打印为false,因此根据该方法,没有以“#”开头的行symbol。但我无法解释。@user3015501:请显示您定义inputstream的位置。您还可以显示一个示例inputfile吗?我添加了我认为会有帮助的内容,希望它能对整个过程有更多的了解。
 boolean startsWith= line.indexOf('#')==1;