line.startsWith不解释字符串

时间:2015-06-05 10:53:45

标签: java

我正在尝试不使用像2 2这样的字符串打印行,但是当前状态只是以notice开头的行正在被删除。我调试它并在代码行中编写输出。我该如何解决?

我感谢任何帮助。

代码:

    int number = Character.getNumericValue(newName.charAt(2));
    //here start_zero is `2 2`
    String start_zero = new StringBuilder().append(number)
            .append(" ").append(number).toString();

    try (PrintWriter writer = new PrintWriter(path + File.separator
            + newName);

            Scanner scanner = new Scanner(file)) {
        while (scanner.hasNextLine()) {
                            //here is the first line `2 2`
            String line = scanner.nextLine();
//here is start_zero `2 2` too.
            if (!line.startsWith("notice") || !line.startsWith(start_zero) ) {

                writer.println(line);
                writer.flush();
            }

        }
    } catch (Exception e) {
        e.printStackTrace();
    }

3 个答案:

答案 0 :(得分:1)

if (!line.startsWith("notice") || !line.startsWith(start_zero) ) {

                writer.println(line);
                writer.flush();
            }

你的问题出在你的if语句中。您使用了OR,但您应该使用AND

if (!line.startsWith("notice") && !line.startsWith(start_zero) ) {

                writer.println(line);
                writer.flush();
            }

如果第一个返回true,那么你的情况就是第二个。

答案 1 :(得分:1)

只需将你的if语句操作符从OR改为AND,就像这样

{assign var='totalTax' value=$total_products_wt - $total_products}

{displayWtPriceWithCurrency price=$totalTax currency=$currency}</span>

答案 2 :(得分:0)

这个条件:

if (!line.startsWith("notice") || !line.startsWith(start_zero) )

表示:“如果该行没有以”notice“开头,或者该行没有以”2 2“开头,请执行以下操作。

这意味着如果该行不以“notice”开头,则整个条件成立。因为只有满足其中一个条件才能满足第一个或第二个条件是正确的。

如果您想要仅在“通知”或“2 2”开头的情况下打印该行,您必须使用以下条件之一:

! ( line.startsWith("notice") || line.startsWith(start_zero) ) 

(注意:括号是重要的。)或等效(通过DeMorgan定律):

! line.startsWith("notice") && ! line.startsWith(start_zero)

第一个可以被解释为'如果行不是以“notice”或“2 2”开头,则执行以下操作,第二个可以解释为:如果行不以“2”开头,请执行以下操作“通知”并不以“2 2”开头。