我正在尝试创建一个从文件中读取单词并将其保存在名为common的字符串中的方法。
在此之后,它应该将字符串列表中的单词(而不是ArrayList
)中的单词进行比较,并删除列表中出现在文件中的任何节点(或常用的字符串)
当我编译这个程序时,它工作正常。它也运行。但是,出于某种原因,它只是跳过while循环。
private void removeCommonEnglishWords() {
Scanner infile = null;
try {
infile = new Scanner( new FileInputStream( "filename" ) );
} catch(Exception e) {
System.out.println("Nope");
}
String common = "";
while (infile.hasNext()) {
common = common + infile.next() + " ";
}
for (int k = 0; k < terms.size(); k++) {
if (common.contains(terms.get(k))) {
terms.remove(k);
}
}
}
答案 0 :(得分:0)
如果它跳过while循环,那么这意味着你唯一可能的问题是&#34; infile&#34;没有定义,并且它从初始化开始为空,或者它只是空的。
实际上,通过查看此代码snibbit,这是有道理的。在您的代码中,这是您在try块中运行的唯一内容:
try {
infile = new Scanner( new FileInputStream( "filename" ) );
}
// By the way you should use this instead
try( /*initialized resources here */ ) {
//Do work here
}
您的所有工作都需要在此try块中。这是因为如果输入流发生某些事情,或者您的代码触发异常,则需要正确处理。上面提到的try(with resources)块会在代码执行继续之前自动尝试在try块之后直接关闭声明的资源。这主要是出于安全原因,因此其他用户无法获取您的资源并对其进行操作。
例如,您的代码块可能看起来像下面(我在这里放置虚拟示例代码):
try ( FileOutputStream fos = new FileOutputStream("server/file.txt")) {
// Do work.
byte[] byteArray = new byte[9]();
fos.write(byteArray);
// Try with resources block will automatically try closing the resources,
//but if there are any errors, they are suppressed. You can still print the
//supressed errors, but you will have to write extra code for this.
} catch(Exception e) {
// Always print out logs, so you know what went wrong!
e.printStackTrace();
System.out.println("Whoops! There was an error, please fix.");
}
Here是尝试使用资源的文档,如果您想了解更多信息:)
另外,您没有指定文件名的任何内容,但是您确定自己拥有正确的文件路径吗?