如何使用方法从文本文件返回特定字母的数量

问题描述 投票:0回答:2

假设我有一个充满随机单词或字母的文本文件,我需要能够增加字母被看到的次数。对于这个例子,我试图找到字母“a”。虽然程序确实会编译并返回一个数字,但对于我要查找的特定字母的数量而言,该数字可能太高或太低。改变我的代码,我该如何解决这个问题?

哦!我应该提一下,我发送此代码的人希望它以具有方法的形式构建,而 Problem9 只有参数(文件,文件)并且必须构造成方法的形式

package module4labs;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.InputMismatchException;

public class Module4Labs {
    public static void main(String[] args) {
        new Module4Labs();
    }
    
    public Module4Labs() {
        double problemSolution = Problem9(new File("Problem9.txt"));
                System.out.println(problemSolution);        
    }

//Problem 9: Find 'a'
public int Problem9(File file) {
    int counter =0;
    try {
    Scanner input = new Scanner(file);
    ArrayList<String> list = new ArrayList<String>();
    while(input.hasNext()) {
        list.add(input.next());
    }
    
    for (int x=0; x<list.size()-1;x++) {
        if (list.subList(x,x+1).equals('a'));
        counter++;
    }
    input.close();
 } catch (FileNotFoundException e) {
    System.out.println(file + "File Not Found.");
    }
 return counter;

}

目前,我从 Eclipse 收到一条警告,说“不太可能是 equals() 的参数类型:char 似乎与 List 无关”

不确定如何继续这个

java methods text-files
2个回答
1
投票

我发送此代码的人希望它看起来与此类似不,他们没有。此代码违反了 Java 中的多个编码约定;

Problem9
是一个糟糕且难以描述的方法名称。你在数一个
char
的出现。不要硬编码
char
- 将它传递给方法并为方法指定一个合适的名称,例如
countChar
。迭代文件的行,然后迭代查找
char
的行的内容。接下来,不计算结果并将其打印在 构造函数中。我会让
countChar
静态,但假设你必须实例化你的类,我会在
main
中这样做,然后调用该方法。喜欢,

public static void main(String[] args) {
    Module4Labs m4l = new Module4Labs();
    double problemSolution = m4l.countChar(new File("Problem9.txt"), 'a');
    System.out.println(problemSolution);
}

public int countChar(File file, char ch) {
    int counter = 0;
    // This is a try-with-Resources, don't hard code input.close();
    try (Scanner input = new Scanner(file)) {
        while (input.hasNextLine()) {
            String line = input.nextLine();
            for (int i = 0; i < line.length(); i++) {
                if (line.charAt(i) == ch) {
                    counter++;
                }
            }
        }
    } catch (FileNotFoundException e) {
        System.out.println(file + " File Not Found.");
    }
    return counter;
}

0
投票

我们也可以使用

java.nio.file
包来完成这个任务。例如,

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

public class CharacterFrequency {
    private String str;

    public CharacterFrequency(File file) {
        try {
            this.str = Files.readString(file.toPath());
        } catch (IOException e) {
            System.err.println(e);
        }
    }

    public int getFrequency(char a) {
        int frequency = 0;
        for (char b : str.toCharArray()) {
            if (a == b) {
                frequency++;
            }
        }
        return frequency;
    }

    public void showFrequency(char a) {
        int frequency = getFrequency(a);
        System.out.printf("The character %c appears %d times\n", a, frequency);
    }

    public static void main(String[] args) {
        if (args.length < 1) {
            System.out.println("Usage: java CharacterFrequency.java path/to/file");
            return;
        }
        File f = new File(args[0]);
        CharacterFrequency cf = new CharacterFrequency(f);
        cf.showFrequency('a');
        cf.showFrequency('z');
        cf.showFrequency('g');
        cf.showFrequency('p');
    }
}

我创建了一个包含以下内容的文件 example.txt:

The soccer player scored a goal.

我将文件 example.txt 保存到与 CharacterFrequency.java 相同的目录中。

然后我运行命令:

% java CharacterFrequency.java example.txt
The character a appears 3 times
The character z appears 0 times
The character g appears 1 times
The character p appears 1 times
© www.soinside.com 2019 - 2024. All rights reserved.