java - Java 文本文件中字母 (a-z) 的相对频率计数

标签 java

我的文本输入文件已被处理,仅包含字母 (a-z) 和空格。由于某种原因,当我输入一个非常大的文本文件(大约400 000字的文件,通过剪切并粘贴到MSWord中确定)时,相对频率计数失败。但对于较小的文件,它可以工作,例如总字符= 36。请有人告诉我代码哪里出了问题?

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class SoloCount {

public static void main(String[] args) throws IOException {
String inputFile = "sampleOutput.txt";


// My array for the a-z (97-122, based on ASCII table )

try {
int[] myArray = new int[26];
BufferedReader readerObject = new BufferedReader(new FileReader(inputFile));
String sCurrentLine="";
sCurrentLine = readerObject.readLine();

for(int i = 0; i<sCurrentLine.length(); i++)  // for each character in the readline                    from the input file, a-z will be counted.
        {
            if (Character.isLetter(sCurrentLine.charAt(i)) == true)     // qualifies characterisa letter and not an empty space.
            {
            char singleLetter = sCurrentLine.charAt(i);
            myArray[(int)(singleLetter)-97] = myArray[(int)(singleLetter)-97] + 1;  // Assigning frequency of a character. 97-122 represents a-z (ASCII table). e.g lowercase c = 97
            }
        }
        readerObject.close();


    //Calculate the total number of characters from the input file.
    double sumOfCharacters= 0;
    for (int i = 0; i < myArray.length; i++) 
    {
        sumOfCharacters += myArray[i];
    }
    System.out.println("The total number of characters in this file is: " + sumOfCharacters);

    //Calculating the realtive frequency.  Divide each occurrence for each letter (a-z) by the sumOfCharacters.
    System.out.printf("%10s%6s%n", "Letter", "%");   //column labels "Letter" and "%"
    System.out.println();
    for (int i = 0; i < myArray.length; i++) 
    {
        char singleLetter = (char)(i + 97);         //converting the decimal ASCII annotation to letters for a-z
        double value = myArray[i];
        System.out.printf("%8s%13f%n",singleLetter,(value/sumOfCharacters)*100);
    }

    } 
catch (FileNotFoundException e) {
        e.printStackTrace();
    }


}

}

最佳答案

您只读取文件的一行 - 可能该行只有 36 个字符,或者 36 个字符后有一个换行符。

您还可以通过传入更大的初始缓冲区大小来增加 BufferedReader 的缓冲区大小 -

BufferedReader readerObject = new BufferedReader(new FileReader(inputFile), 2048);

更多详情请参见here .

关于java - Java 文本文件中字母 (a-z) 的相对频率计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132734/

相关文章:

java - 我想知道添加到 blob 存储的文件的位置

java - 在 Java 中比较 float 和 int 安全吗?

java - Sonar 项目与 Sonar 模块( Sonar 项目的一部分)

java - 如何修复这个错误的操作数 (&&)

java - 为什么主线程没有终止

java - 注释使用不当应使用什么异常

java - 如何测试 AtomicBoolean 的原子性?

java - 无法使用 Ant 获得按照我想要的方式构造的 jar 文件

java - 创建线程部署在 Tomcat 中的 Web 应用程序

java - 复制和增强对象的最佳实践(设计模式)