【问题标题】:Creating a program in java that counts sentences, paragraphs, letters and words在java中创建一个计算句子、段落、字母和单词的程序
【发布时间】:2018-12-05 08:59:55
【问题描述】:

我需要创建一个程序来计算文本文件中字符的频率,以及段落单词和句子的数量。

我有一个问题,当我的程序输出字母的频率时,程序会为字母表中的每个字母输出多个输出。

输出应该是这样的:

如果输入是“hello world!”

(应该为所有字母输出这个):

字母a已被找到0次

字母 b 已被找到 0 次

(直到到达出现的字母,然后显示它们出现的次数)

段落数:1

句子数:1

字符数:10

字数:2

我已经为此工作了数周,但仍然找不到解决方案。

package SuperCounter2;

import java.io.*;

public class SuperCounter2 {

public static void main(String[] args) throws IOException {
    File file = new File("//Users//4617621//Desktop//This is the most stupid assignment");
    FileInputStream fileStream = new FileInputStream(file);
    InputStreamReader input = new InputStreamReader(fileStream);
    BufferedReader reader = new BufferedReader(input);

    String line;

    int countWord = 0;
    int sentenceCount = 0;
    int characterCount = 0;
    int paragraphCount = 1;
    int whitespaceCount = 0;

    while ((line = reader.readLine()) != null) {
        int ci, i, j, k, l = 0;
        char c, ch;
        i = line.length();

        if (line.equals("")) {
            paragraphCount++;
        }

        if (!(line.equals(""))) {
            characterCount += line.length();

            String[] wordList = line.split("\\s+");

            countWord += wordList.length;
            whitespaceCount += countWord - 1;

            String[] sentenceList = line.split("[!?.:]+");
            sentenceCount += sentenceList.length;
        }

         int counter = 0;

        for (int m = 0; m < line.length(); m++) {
            counter++;
        }

        for (c = 'A'; c <= 'z'; c++) {
            k = 0;
            for (j = 0; j < i; j++) {
                 ch = line.charAt(j);
            if(ch == c) {
                k++;
                  System.out.println(" the character " + c + " has occured " + k + " times");
            }
        }
    }
  }

   System.out.println("Total word count = " + countWord);
    System.out.println("Total number of sentences = " + sentenceCount);
    System.out.println("Total number of characters = " + characterCount);
    System.out.println("Number of paragraphs = " + paragraphCount);
    System.out.println("Total number of whitespaces = " + whitespaceCount);

  }
}

【问题讨论】:

  • 这听起来是一个很好的机会让你花一些时间学习how to debug你的代码。
  • 你得到的实际输出是什么?
  • 您不会在任何地方按字母保存任何信息。
  • 字符 s 出现 1 次 字符 s 出现 2 次 字符 s 出现 3 次 字符 s 出现 4 次 它将为字母表中的每个字母输出不止一次。
  • 您确定需要分别计算大小写字母吗?如果您要计算字母表中的每个字母,您不认为使用多个计数器会更有效吗?也许是一个计数器数组?

标签: java


【解决方案1】:

我认为您可以将其视为简单地计算句点、空格、回车等的数量。

一次一个字母而不是一个单词可能更容易做到这一点。

唯一会变得棘手的地方(您需要一次查看多个内容)可能存在“word1.word2”、“word1.word2”或“word1.word2”(两个空格)。对于那些你可能需要保留一个标志,说明如果前一个字符是“单词分隔符”(句点、空格、c/r),那么不要计算另一个单词。

否则它看起来很简单。查看字符,如果是句号,则将其添加到行数和字数,如果是空格,则将其添加到字数,如果是 c/r,则将其添加到段落,字数,然后跟踪每个字母(可能在地图中)

如果算上标志操作,循环内部应该有大约 5 行代码。

不写代码,因为这听起来像是家庭作业。

PS:这实际上看起来是一个很酷的任务:)

【讨论】:

  • 您的逻辑假设文本格式正确。 (可能是出于教育目的) - 但在现实世界中,计算空格来计算单词很可能会“肯定会失败”。以及句子的点.......
  • 我在第三段中指出了这一点以及一个解决方案。如果您想将所有非字母字母添加到此处描述的“单词分隔符”列表中,那可能不是一个坏主意。
猜你喜欢
  • 2016-05-18
  • 2020-11-16
  • 1970-01-01
  • 2021-04-01
  • 2015-10-08
  • 2022-11-27
  • 2016-07-06
  • 1970-01-01
  • 2013-08-13
相关资源
最近更新 更多