我是Java的新手,试图提交一个有效的项目,在这个例子中printDuplicates
。说明如下:
编写一个名为printDuplicates的方法,该方法接受包含一系列行的输入文件的Scanner作为其参数。您的方法应检查每一行,查找同一行上连续出现的同一令牌,并按连续出现的次数打印每个重复的令牌。不打印非重复的标记。在这个问题中不考虑重复多行(例如,如果一行以给定的标记结束而下一行以相同的标记开头)。
例如,如果输入文件包含以下文本:
你好,你怎么样对你 我是杰克杰克斯傻笑的傻笑,傻笑的傻笑 弓哇哇yippee yippee yo yippee yippee yay yay yay 一条鱼两条鱼红色鱼蓝色鱼 它是布偶秀,wakka wakka wakka 您的方法将为前面的输入文件生成以下输出:
如何* 2你* 4 我* 3杰克的* 2傻笑* 5 哇* 2 yippee * 2 yippee * 2 yay * 3
瓦卡* 3 您的代码仅打印重复的令牌;仅显示连续一次的那些未显示。您的代码应在每个报告的重复令牌之间放置一个空格,并应尊重原始文件中的换行符。这就是预期输出中出现空白行的原因,对应于不包含任何连续重复标记的文件的第四行。您可以假设文件的每一行至少包含一个输入标记。
这是我的代码,非常适合提交。
import java.io.*;
import java.util.*;
Scanner input;
public static void printDuplicates(Scanner input) throws Exception {
String word = "";
String word2 = "";
input = new Scanner(new File("idontknowwhattodo.txt"));
while(input.hasNextLine()) {
Scanner line = new Scanner(input.nextLine());
int repeat = 1;
word = line.next();
while(line.hasNext()) {
word2 = line.next();
while(word.equals(word2)) {
repeat++;
if(line.hasNext()){
word2 = line.next();
} else {
break;
}
}
if(repeat!=1) {
System.out.print(word + "*" + repeat + " ");
}
repeat = 1;
word = word2;
}
System.out.println();
}
}
但是,每当我尝试提交项目时,它都会抛出此错误:
(no output was produced!)
SecurityException on line 5:
You are not allowed to read the file /usr/share/tomcat7/temp/idontknowwhattodo.txt
java.lang.SecurityException: You are not allowed to read the file /usr/share/tomcat7/temp/idontknowwhattodo.txt
at java.io.FileInputStream.<init>(FileInputStream.java:135)
at java.io.FileReader.<init>(FileReader.java:72)
at Scanner.<init>(Scanner.java:330)
at printDuplicates (Line 5)
这是什么意思?我有多个工作项目,但由于这一个错误,我似乎无法提交它们。有哪些专家可以帮我解决这个问题吗?谢谢。
答案 0 :(得分:1)
看起来你正在使用你的路径中的Tomcat。 Tomcat需要特殊的安全权限才能读取或写入文件。这是防止恶意代码访问操作系统上的敏感文件的基本保护。您可以配置这些目录或坚持读取和写入默认目录:
https://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html
答案 1 :(得分:1)
由于声誉点无法添加评论,因此请使用“答案”部分。
同意上述评论,它与权限有关。
答案 2 :(得分:0)
根据说明,您已经将Scanner
对象(引用输入文件)作为方法的参数。所以,你不应该重新初始化它。
该行应删除:
input = new Scanner(new File("idontknowwhattodo.txt"));
答案 3 :(得分:0)
问题描述表示您正在将Scanner对象作为参数。您不必重新创建它,您可能会尝试将您的项目提交给某些在线竞赛。服务器上的程序将加载您的类并使用Scanner对象作为参数调用方法printDuplicates()
,您不必担心它是如何创建的。只要使用它,一切都会好的。
只需注释扫描仪分配行,如下所示
String word = "";
String word2 = "";
/*input = new Scanner(new File("idontknowwhattodo.txt"));*/
while(input.hasNextLine()) {
...