假设我有一个充满随机单词或字母的文本文件,我需要能够增加字母被看到的次数。对于这个例子,我试图找到字母“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 中的多个编码约定;
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;
}
我们也可以使用
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