计数java程序的段落

时间:2014-04-19 20:58:24

标签: java

我的程序不会在文本中输出正确数量的段落。请帮忙 我找到了我的错误!我在最底层使用了一个单独的方法(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日

3 个答案:

答案 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(零)。