我试图返回一个字符串是否出现在文件的任何行中,并打印出它出现的行(如果有的话)。
目前,在控制台中,它会打印我的if
和else
语句的输出。我无法弄清楚我哪里出错了。我想要true
或false
,而不是两个值。这就是我在控制台中得到的结果:
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
语句中,我想执行完全不同的动作。
答案 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),并且str
到eachLine
(来自Smalltalk的习惯,强调变量的迭代性质)。