我的作业有问题。基本上方法printLinesWhichContain(String word)
应该打印包含给定单词的行,这样可以正常工作,如果String为空(""
),则打印文件中的所有行。最后一部分不起作用。有什么建议吗?
import java.io.File;
import java.util.Scanner;
public class Printer {
private File lol;
private Scanner reader;
public Printer(String fileName)throws Exception{
this.lol = new File(fileName);
this.reader = new Scanner(lol);
}
public void printLinesWhichContain(String word) {
if (word.isEmpty()) {
while (this.reader.hasNextLine()) {
String x = this.reader.nextLine();
System.out.println(x);
}
} else {
while (this.reader.hasNextLine()) {
String x = this.reader.nextLine();
if (x.contains(word)) {
System.out.println(x);
}
}
}
}
}
主要
public class Main {
public static void main(String[] args) throws Exception {
Printer printer = new Printer("src/textfile.txt");
printer.printLinesWhichContain("Väinämöinen");
System.out.println("-----");
printer.printLinesWhichContain("Frank Zappa");
System.out.println("-----");
printer.printLinesWhichContain("");
System.out.println("-----");
}
}
档案文字
Siinä vanha Väinämöinen
katseleikse käänteleikse
Niin tuli kevätkäkönen
näki koivun kasvavaksi
Miksipä on tuo jätetty
koivahainen kaatamatta
Sanoi vanha Väinämöinen
输出
Siinä vanha Väinämöinen
Sanoi vanha Väinämöinen
-----
-----
-----
答案 0 :(得分:0)
在您的应用程序中,您只创建了一个扫描程序,它只能遍历整个文件一次。如果您希望每次调用printLinesWhichContain
方法时迭代整个文件,则需要重置扫描程序,最有可能是创建新扫描程序。
因此,其中一个选项是在
结束时重新初始化使用过的扫描程序public void printLinesWhichContain(String word) {
//...your original code
this.reader = new Scanner(lol);
}
方法。但是如果你不在这种方法之外的其他地方使用扫描仪,那么可能值得将它变成局部变量而不是类字段。
public void printLinesWhichContain(String word) {
Scanner reader = new Scanner(lol);
//...your original code
}
其他选项可能是读取文件一次并使用
等代码存储其内容List<String> allLines = Files.readAllLines(lol.toPath());
您可以遍历此列表而不是文件。
答案 1 :(得分:0)
如果您将main
更改为:
public static void main(String[] args) throws Exception {
Printer printer = new Printer("src/textfile.txt");
printer.printLinesWhichContain("Väinämöinen");
System.out.println("-----");
printer.printLinesWhichContain("Frank Zappa");
System.out.println("-----");
printer = new Printer("src/textfile.txt");
printer.printLinesWhichContain("");
System.out.println("-----");
}
它会起作用。原因是,由于您编写代码的方式,printer
需要重新初始化,以便它可以从头开始重读。