我的程序不会在文本中输出正确数量的段落。请帮忙 我找到了我的错误!我在最底层使用了一个单独的方法(paraCounter)来计算它。
预期产量:4(根据以下文字) 我一直在:5
谢谢!
import java.util。; import java.io。;
公共类WordStats1 {
public static void main(String[] args) {
try {
Scanner input = new Scanner(new FileReader("data.txt"));
PrintWriter output = new PrintWriter(new FileOutputStream(
"newfile.txt"));
int lineNum = 0;
int wordCount = 1;
int charCount = 0;
int paraCount = 0;
boolean key = true;
while (input.hasNextLine()) {
String line;
line = input.nextLine();
lineNum++;
wordCount += getWords(line);
charCount += (line.length());
if (!line.isEmpty()){
key = false;
}
if (!key)
paraCount += getPara(line);
}
System.out.println(lineNum + " line(s)");
System.out.println(wordCount + " word(s)");
System.out.println(charCount + " character(s)");
System.out.println(paraCount + " paragraph(s)");
input.close();
output.close();
System.out.print("File written.");
}
catch (FileNotFoundException e) {
System.out.println("There was an error opening one of the files.");
}
}
public static int getWords(String line) {
String str[] = line.split((" "));
int count = 0;
for (int i = 0; i < str.length; i++) {
if (str[i].length() > 0) {
count++;
}
}
return count;
}
public static int getPara(String line){
int count = 0;
if(line.isEmpty()) {
count++;
}
return count;
}
}
THE TEXT: 四年前和七年前,我们的父亲在这个大陆上建立起来,一个新的国家,在美国构思 自由,并致力于所有人创造平等的主张。
现在我们正在进行一场伟大的内战,检验这个国家,或者任何一个国家是否如此构想 敬业,可以长久忍受。我们遇到了这场战争的伟大战场。我们来奉献了一个 该领域的一部分,作为那些在这里献出生命的人的最后安息之地 生活。我们应该这样做是完全合适的。
但是,从更广泛的意义上说,我们不能奉献 - 我们不能奉献 - 我们不能成为现实。 那些在这里挣扎的勇敢的人,无论是活着的还是死去的人,都已经将它们奉献出来,远远超过了我们增添不足的力量 或减损。世界将很少注意到,也不记得我们在这里所说的,但它永远不会忘记 他们在这里做了什么。对我们来说,生活,而是在这里致力于未完成的工作 到目前为止,在这里打过仗的人如此高尚。我们宁愿在这里致力于伟大的事业 我们面前的任务 - 从这些荣幸的死者那里,我们更加热衷于这一事业 他们给出了最后一个充分的奉献精神 - 我们在这里高度决心这些死者不应该 白白死了 - 这个国家,在上帝之下,将有一个新的自由诞生 - 和那个政府 人民,人民,为人民,不应该从地球上消亡。
亚伯拉罕林肯 1863年11月19日
答案 0 :(得分:0)
由于您的代码现在是paraCount
,因此只能是1或0.您需要更改
paraCount = getPara(line);
到
paraCount += getPara(line);
同时将段落检测更改为此
public static int getPara(String line){
int count = 0;
if(line.isEmpty()) {
count++;
}
return count;
}
更改为
if (key)
paraCount += getPara(line);
答案 1 :(得分:0)
Scanner.nextLine返回不包含任何换行符的行。因此,您无法在字符串中找到\r\n
。
我认为段落被定义为以.!?"
之一结尾的一行或多行。
public static int getPara(String line) {
return line.matches(".*[\\.\\?\\!\"]$) ? 1 : 0:
}
当然会增加paraCount。
paraCount += getPara(line);
答案 2 :(得分:0)
我不知道您的输入是什么样的,但getPara总是返回0.您读取一行并将其传递给getPara。在getPara中,str数组将始终包含一个元素,因为您尝试拆分“\ r \ n”。然后,只有当str.length&gt;时才增加计数。它永远不会是1,所以count永远不会增加,方法总是返回0(零)。