Разработайте программу, которая читает текстовый файл ASCII (предоставляется) по одному байту за раз и создает выходной файл, который содержит счетчик частоты появления каждого символа во входном файле.Не сортируйте вывод.Экземпляр класса символьной частоты должен использоваться для представления каждого уникального символа в файле (см. Ниже).Для этого упражнения объекты символьной частоты должны быть обработаны и сохранены с использованием массива.
Я попытался создать объект символьных частот и использовать метод равенства для сравнения его с входными данными.
массив должен хранить новые символы и частоту символов, но он также хранит дубликаты и частота не является точной.
public class CharacterFrequency {
//Stores character by character from input file to check if its in ASCII
array
private static char character;
//Stores number of times character shows up in input file
private static int frequency = 0;
private static CharacterFrequency arr[] = new CharacterFrequency[256];
//Constructor class for CharacterFrequency
public CharacterFrequency(char character, int frequency){
setCharacter(character);
setFrequency(frequency);
}
public static void main(String[] args){
//initiate object array to store character and frequency variables
File file = new File("C:/Users/alber/Desktop/sample.txt");
if (!file.exists()) {
System.out.println(args[0] + " does not exist.");
return;
}
if (!(file.isFile() && file.canRead())) {
System.out.println(file.getName() + " cannot be read from.");
return;
}
try {
FileReader fr = new FileReader("C://Users/alber/Desktop/sample.txt");
//loop through character array
for(int i = 0; i < arr.length; i++){
//read file character by character until no characters
are left and store character each time
int j = 0;
while ((j=fr.read()) != -1){
character = (char)j;
//if character is in the array already do not add
it just call increment method
//if(arr[i].equals(character)){
if(arr[i] == null || (!
(arr[i].equals(character)))){
arr[i] = new
CharacterFrequency(character,frequency);
System.out.println(arr[i]);
//if character is not in the array add it to it
}else{
increment();
}//end else
}//end while
}//end for
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public char getCharacter(){
return character;
}
public static void setCharacter(char character){
}
public int getFrequency(){
return frequency;
}
public void setFrequency(int frequency){
this.frequency = frequency;
}
public static void increment(){
frequency++;
}
@Override
public boolean equals(Object obj){
if(obj == null || obj.getClass()!= this.getClass()){
return false;
}
if(obj == this){
return true;
}
CharacterFrequency c = (CharacterFrequency)obj;
return CharacterFrequency.character == this.character && CharacterFrequency.frequency == this.frequency;
}
public String toString(){
return character + " " + frequency;
}
}