Java, считая буквы в файле - PullRequest
       9

Java, считая буквы в файле

0 голосов
/ 15 октября 2018

Я пытаюсь прочитать количество букв из файла, который вводит пользователь, в данном случае: "cyphertext.txt".Проблема, с которой я столкнулся, состоит в том, что вместо вывода файла с 94 "E" или 27 "Z" он выводит количество букв в имени файла, поэтому в "ciphertext.txt" 2 "T".s.(Это было закодировано в BlueJ)

Вот код из Частотомер :

import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
public class FrequencyTester
{
    public static void main(String[] args) throws IOException
    {

        //freq.findFile();


        Scanner in = new Scanner(System.in);
        String fileNameStr = "";
        while(! (new File (fileNameStr + ".txt").isFile()))
        {
            System.out.print("Please input the name of your desired file (no file extension required): "); 
            fileNameStr = in.next() + in.nextLine(); 
            if(new File (fileNameStr + ".txt").isFile())
            {
                System.out.println("\nFile accepted."); 
                Frequency freq = new Frequency(fileNameStr);
                Scanner inFile = new Scanner(fileNameStr + ".txt");
                freq.fileWords(inFile);
                freq.frequencyPrinter();

            }
            else
            {
                System.out.println("\nError: Invalid File Name");
            }
        }
    }

}

Вот код из Частота :

import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
public class Frequency
{
    // instance variables - replace the example below with your own
    private int x;
    private String fileNameStr, oneWord, oneChar; 
    public final char [] alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
    public int [] alphaCounter = new int[alphabet.length];

    /**
     * Constructor for objects of class Frequency
     */
    public Frequency(String fileNameStr) throws IOException
    {
        // initialise instance variables
        //File fileName = new File (fileNameStr + ".txt");
        PrintWriter outFile = new PrintWriter(new File(fileNameStr +"Frq.txt"));
        //Scanner inFile = new Scanner(fileName);

        for(int h = 0; h < alphaCounter.length; h++)
            alphaCounter[h] = 0; 
    }

    public void fileWords(Scanner inFile) 
    {
        while(inFile.hasNext())
        {
            oneWord = inFile.next(); 
            System.out.println(oneWord); 
            for(int i = 0; i < oneWord.length(); i++)
            {
                if(!Character.isWhitespace(oneWord.charAt(i)))
                    charCounter(i);
            }
        }
    }
    public void charCounter(int i)
    {
        for(int j = 0; j < alphabet.length; j++)
        {
            if(oneWord.charAt(i) == alphabet[j])
            {
                alphaCounter[j]++; 
            }
        }
    }
    public void frequencyPrinter()
    {
        System.out.print("\n");
        for(int k = 0; k < alphabet.length; k++)
        {
            System.out.print(alphabet[k] + " - " + alphaCounter[k] + "\n");
        }
    }
}

Вот настройка в BlueJ и Выход:

BlueJ

Выход

...