如何计算Java中文本文件中每个字母的出现次数?

如何计算Java中文本文件中每个字母的出现次数?,java,arrays,character,Java,Arrays,Character,我对Java非常陌生,我正在努力完成我的第一项任务。任务是扫描一个文本文件(para1.txt)并通读它,计算每个字母出现的次数。 (因此,它应该输出a-57、b-21、c-12等) 我觉得我离答案很近了,但是,我在实际计算角色出现时有点困难。目前,我的代码为所有字母打印“17”,因为para1.txt文件中有17行。 以下是我目前的代码: import java.io.File; import java.io.FileNotFoundException; import java.util.Sc

我对Java非常陌生,我正在努力完成我的第一项任务。任务是扫描一个文本文件(para1.txt)并通读它,计算每个字母出现的次数。 (因此,它应该输出a-57、b-21、c-12等) 我觉得我离答案很近了,但是,我在实际计算角色出现时有点困难。目前,我的代码为所有字母打印“17”,因为para1.txt文件中有17行。 以下是我目前的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class LetterCounter {
    public static void main(String[] args) throws FileNotFoundException {

        Scanner input = new Scanner(new File("src/para1.txt"));

        int[] count = new int[26];

        while (input.hasNextLine()) {
            String answer = input.nextLine();
            answer = answer.toLowerCase();
            char[] characters = answer.toCharArray();

            for (int i = 0; i < 26; i++) {
                count[i]++;
            }
        }

        for (int i = 0; i < 26; i++) {
            StdOut.print((char) (i + 'a'));
            StdOut.println(": " + count[i]);
        }
    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
公营信笺台{
公共静态void main(字符串[]args)引发FileNotFoundException{
扫描仪输入=新扫描仪(新文件(“src/para1.txt”);
int[]计数=新的int[26];
while(input.hasNextLine()){
字符串answer=input.nextLine();
answer=answer.toLowerCase();
char[]characters=answer.toCharArray();
对于(int i=0;i<26;i++){
计数[i]++;
}
}
对于(int i=0;i<26;i++){
标准打印((字符)(i+a');
StdOut.println(“:”+计数[i]);
}
}
}

在循环中,只需增加
计数的每个索引
数组:

for (int i = 0; i < 26; i++) {
     count[i]++;
}
唯一的问题是,如果有任何非字母字符,这将抛出索引越界错误。您可能需要确保它在以下范围内:

int index = c - 'a';
if(index > 25 || index < 0) {
    System.out.println("Invalid character");
} else {
   //process like normal
}
int index=c-'a';
如果(索引>25 | |索引<0){
System.out.println(“无效字符”);
}否则{
//过程正常
}

在循环中,只需增加
计数的每个索引
数组:

for (int i = 0; i < 26; i++) {
     count[i]++;
}
唯一的问题是,如果有任何非字母字符,这将抛出索引越界错误。您可能需要确保它在以下范围内:

int index = c - 'a';
if(index > 25 || index < 0) {
    System.out.println("Invalid character");
} else {
   //process like normal
}
int index=c-'a';
如果(索引>25 | |索引<0){
System.out.println(“无效字符”);
}否则{
//过程正常
}

也许你还不应该知道地图,但一个简单的解决方案是使用地图

像这样的

HashMap<Character, Integer> chars = new HashMap<>();
for(int i = 0; i < characters.length; i++){
   if(chars.get(characters[i]) == null){
       chars.put(characters[i], 1);
   } else {
      int num = chars.get(characters[i]);
      chars.put(characters[i], num+1); 
}
}

    for(Character c : chars.keyset()){
       print(c + " :" + chars.get(c));
    }
HashMap chars=newhashmap();
for(int i=0;i

可能是一些语法错误,写在这里

也许你还不应该知道地图,但一个简单的解决方案是使用地图

像这样的

HashMap<Character, Integer> chars = new HashMap<>();
for(int i = 0; i < characters.length; i++){
   if(chars.get(characters[i]) == null){
       chars.put(characters[i], 1);
   } else {
      int num = chars.get(characters[i]);
      chars.put(characters[i], num+1); 
}
}

    for(Character c : chars.keyset()){
       print(c + " :" + chars.get(c));
    }
HashMap chars=newhashmap();
for(int i=0;i

可能是一些语法错误,写在这里

我想你应该取下实际的字母,然后检查你是否有字母(而不是空白或数字)

公共类信笺计数器{
公共静态void main(字符串[]args)引发FileNotFoundException{
扫描仪输入=新扫描仪(新文件(“src/para1.txt”);
int[]计数=新的int[26];
while(input.hasNextLine()){
字符串answer=input.nextLine();
answer=answer.toLowerCase();
char[]characters=answer.toCharArray();
///在这里换车!
for(int i=0;i如果((字符[i]>='a')&&(字符[i]),我想你应该记下实际的字母,也许可以检查你是否真的有一个字母(而不是空白或数字)

公共类信笺计数器{
公共静态void main(字符串[]args)引发FileNotFoundException{
扫描仪输入=新扫描仪(新文件(“src/para1.txt”);
int[]计数=新的int[26];
while(input.hasNextLine()){
字符串answer=input.nextLine();
answer=answer.toLowerCase();
char[]characters=answer.toCharArray();
///在这里换车!
for(int i=0;i如果((characters[i]>='a')&&(characters[i]创建一个hashmap,其中character作为键,count(Integer)作为值。hashmap存储键-值对,其中键是唯一的,并且
put()方法用于将特定的键和值插入hashmap

public class CharCount {
    public static void main(String[] args) {
        File f1 = new File("file-path");
        HashMap<Character, Integer> charMap = new HashMap<Character, Integer>();
        try {
            Scanner in = new Scanner(f1);
            while(in.hasNext()) {
                String inputString = in.nextLine();
                inputString = inputString.replace(" ", "");
                char[] strArray = inputString.toCharArray();
                for (char c : strArray) {
                    if (charMap.containsKey(c)) {
                    // If character is present in charMap, incrementing it's count by 1
                        charMap.put(c, charMap.get(c) + 1);
                    } else {
                        // If char is not present in charMap ,
                        // putting this character to charMap with 1 as it's value
                        charMap.put(c, 1);
                    }
                }
            }
            // Printing the charMap 
            System.out.println(charMap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
公共类字符数{
公共静态void main(字符串[]args){
文件f1=新文件(“文件路径”);
HashMap charMap=新的HashMap();
试一试{
扫描仪输入=新扫描仪(f1);
while(在.hasNext()中){
String inputString=in.nextLine();
inputString=inputString.replace(“,”);
char[]strArray=inputString.toCharArray();
用于(字符c:strArray){
if(charMap.containsKey(c)){
//如果charMap中存在字符,则将其计数增加1
charMap.put(c,charMap.get(c)+1);
}否则{
//如果charMap中不存在char,
//将此字符以1作为其值放入charMap
charMap.put(c,1);
}
}
}
//打印字符映射
System.out.println(charMap);
}catch(filenotfounde异常){
e、 printStackTrace();
}
}
}

创建一个hashmap,其中字符作为键,计数(整数)作为值。hashmap存储键-值对,其中键是唯一的,并且 put()方法用于将特定的键和值插入hashmap

public class CharCount {
    public static void main(String[] args) {
        File f1 = new File("file-path");
        HashMap<Character, Integer> charMap = new HashMap<Character, Integer>();
        try {
            Scanner in = new Scanner(f1);
            while(in.hasNext()) {
                String inputString = in.nextLine();
                inputString = inputString.replace(" ", "");
                char[] strArray = inputString.toCharArray();
                for (char c : strArray) {
                    if (charMap.containsKey(c)) {
                    // If character is present in charMap, incrementing it's count by 1
                        charMap.put(c, charMap.get(c) + 1);
                    } else {
                        // If char is not present in charMap ,
                        // putting this character to charMap with 1 as it's value
                        charMap.put(c, 1);
                    }
                }
            }
            // Printing the charMap 
            System.out.println(charMap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
pu