Benford定律Java-从文件读取的字符串数组中提取第一个数字?
我试图用Java创建一个程序,从文件中读取,提取每个数字的第一个数字,确定0-9的频率,并以数字0到9的百分比打印出频率。我已经知道如何从我的lakes.txt文件中读取数据Benford定律Java-从文件读取的字符串数组中提取第一个数字?,java,arrays,file,Java,Arrays,File,我试图用Java创建一个程序,从文件中读取,提取每个数字的第一个数字,确定0-9的频率,并以数字0到9的百分比打印出频率。我已经知道如何从我的lakes.txt文件中读取数据 FileReader fr = new FileReader ("lakes.txt"); BufferedReader br = new BufferedReader(fr); //for loop that traverses each line of the file
FileReader fr = new FileReader ("lakes.txt");
BufferedReader br = new BufferedReader(fr);
//for loop that traverses each line of the file
int count = 0;
for (String s = br.readLine(); s!= null; s = br.readLine()) {
System.out.println(s); //print out every term
count++;
}
String [] nums;
nums = new String[count];
//close and reset file readers
fr.close();
fr = new FileReader ("lakes.txt");
br = new BufferedReader(fr);
//read each line of the file
count = 0;
for (String s = br.readLine(); s!= null; s = br.readLine()) {
nums[count] = s;
count++;
}
我目前正在打印每一个学期,以确保它是有效的
现在,我试图找出如何从字符串数组中的每个项中提取第一个数字
例如,数组中的第一个数字是15917,我想提取1。第二个数字是8090,我想提取8
我该怎么做 从字符串中提取第一个数字 从字符串中获取第一个字母 将1解析为一个数字 例如:
String firstLetter = Character.toString(s.charAt(0));//alternatively use s.substring(0,1)
int value = Integer.parseInt(firstLetter);
这将被放置在文件读取循环中,假设文件的每一行都包含一个数值,换句话说,不需要对文件的每一行进行进一步的处理或错误处理如果int值与频率相符,您可以考虑使用数组。每个索引0到9将表示每个第一个数字的计数。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TermReader {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader ("lakes.txt");
BufferedReader br = new BufferedReader(fr);
int[] tally = new int[]{0,0,0,0,0,0,0,0,0,0};
int total = 0;
for (String s = br.readLine(); s!= null; s = br.readLine()) {
char[] digits = s.toCharArray();
for(char digit : digits) {
if( Character.isDigit(digit)) {
total++;
tally[Integer.parseInt(Character.toString(digit))]++;
break;
}
}
}
br.close();
for(int index = 0; index < 10; index++) {
double average = tally[index] == 0 ? 0.0 : (((double)tally[index]) / total) * 100;
System.out.println("[" + index + "][" + tally[index] + "][" + total + "][" + Math.round(average * 100.0) / 100.0 + "]");
}
}
}