尝试将文件数据与String进行比较

时间:2016-04-11 00:48:38

标签: java while-loop contains

我试图返回一个字符串是否出现在文件的任何行中,并打印出它出现的行(如果有的话)。

目前,在控制台中,它会打印我的ifelse语句的输出。我无法弄清楚我哪里出错了。我想要truefalse,而不是两个值。这就是我在控制台中得到的结果:

0: -
String False
1: File String, ThisString
String False

这是我的方法:

public void checkString() {
    int line = 0;
    //fileString = false;
    while (scanner.hasNext()) {
        String str = scanner.nextLine();
        System.out.println(line + ": " + str);
        line++;
        if (str.contains(string)) {
            System.out.println("File String," + string);
            fileString = true;
        } else {
            System.out.println("String False");
        }
    }
}

显然有额外的代码,这是我挂断的部分。它遵循我读取的特定文件的路径。关于这个问题的更多细节:如果代码为真,我想执行一个动作,如果是假或在else语句中,我想执行完全不同的动作。

1 个答案:

答案 0 :(得分:2)

找到包含字符串的行的一种方法是:

public String lineContaining(String someString) {
    int lineNumber = 0;
    while (scanner.hasNext()) {
        String eachLine = scanner.nextLine();
        System.out.println(lineNumber + ": " + eachLine);
        lineNumber++;
        if (eachLine.contains(someString)) {
            System.out.println("Found string " + someString
                    + " in line " + lineNumber + ": " + eachLine);
            return eachLine;
        }
    }
    return null;
}

此方法将遍历每一行(由scanner提供)并检查其是否包含someString。如果有这样一行,它将返回它(从而退出while循环);如果没有,该方法返回null,这意味着没有包含您要查找的内容的行。您可以从需要该行的任何地方调用此方法,对结果执行空检查(== null)以查看是否找到了一行,并从那里继续进行。如果您需要更多信息,例如找到您的字符串的行号,我建议您创建一个简单的包装器对象,该对象包含一个字符串(找到您的子字符串的行)和一个整数(行号);然后你的方法可以返回该包装而不是String

请注意,我已将line变量重命名为lineNumber(在我看来,line听起来像是字符串,而不是int),并且streachLine(来自Smalltalk的习惯,强调变量的迭代性质)。