Java 计算字母频率,也包括双字母

Java 计算字母频率,也包括双字母,java,character,frequency,letters,Java,Character,Frequency,Letters,我有一个任务,在这个任务中,我必须从使用Java GUI的用户那里找到给定文本中的字母频率。问题是我是阿尔巴尼亚人,我们的字母表有36个字母:a,b,c…等等,还有“dh”“ll”“nj”“th”“xh”“zh”“ë”“ë” 我是否应该用“IF”来比较下一个字母:如果我有“D”,下一个字母是“H”,我会把它看成是一个字母“DH”,并找到它的频率?Java中还有其他方法吗?最后两个字母呢?Java是否将它们识别为字符? 谢谢。您需要使用支持Unicode的方法,如Character.isleter

我有一个任务,在这个任务中,我必须从使用Java GUI的用户那里找到给定文本中的字母频率。问题是我是阿尔巴尼亚人,我们的字母表有36个字母:a,b,c…等等,还有“dh”“ll”“nj”“th”“xh”“zh”“딓ë”

我是否应该用“IF”来比较下一个字母:如果我有“D”,下一个字母是“H”,我会把它看成是一个字母“DH”,并找到它的频率?Java中还有其他方法吗?最后两个字母呢?Java是否将它们识别为字符?
谢谢。

您需要使用支持Unicode的方法,如
Character.isleter()
。这是来自的代码

在这里,我修改了它以包含Unicode字符

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class LetterFreq {
    public static Map<Character, Integer> countLetters(String filename) throws IOException{
        Map<Character, Integer> freqs = new HashMap<Character, Integer>();
        BufferedReader in = new BufferedReader(new FileReader(filename));
        String line;
        Integer f;
        while((line = in.readLine()) != null){
            line = line.toUpperCase();
            for(Character ch:line.toCharArray()){
                if(Character.isLetter(ch)){
                    f = freqs.get(ch);
                    if (f == null) {
                        freqs.put(ch, 0);   
                    }
                    else {
                        freqs.put(ch, ++f);
                    }
                }
            }
        }
        in.close();
        return freqs;
    }

    public static void main(String[] args) throws IOException{
        Map<Character, Integer> freqs = countLetters("filename.txt");
        Set<Character> keySet = freqs.keySet();
        for (Character key : keySet) {
                    System.out.println("Char: " + key + "  Count: " + freqs.get(key));
        }

    }
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Set;
公共类LetterFreq{
公共静态映射countLetters(字符串文件名)引发IOException{
Map freqs=新的HashMap();
BufferedReader in=新的BufferedReader(新文件读取器(文件名));
弦线;
整数f;
而((line=in.readLine())!=null){
line=line.toUpperCase();
for(字符ch:line.toCharArray()){
if(字符集(ch)){
f=频率获取(ch);
如果(f==null){
频率put(ch,0);
}
否则{
频率输出(ch,+f);
}
}
}
}
in.close();
返回频率;
}
公共静态void main(字符串[]args)引发IOException{
Map freqs=countLetters(“filename.txt”);
设置keySet=freqs.keySet();
用于(字符键:键集){
System.out.println(“字符:+key+”计数:+freqs.get(key));
}
}
}
您可以使用“yourString.contains(“dh”)等,并为它们中的每一个做一个特例
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class LetterFreq {
    public static Map<Character, Integer> countLetters(String filename) throws IOException{
        Map<Character, Integer> freqs = new HashMap<Character, Integer>();
        BufferedReader in = new BufferedReader(new FileReader(filename));
        String line;
        Integer f;
        while((line = in.readLine()) != null){
            line = line.toUpperCase();
            for(Character ch:line.toCharArray()){
                if(Character.isLetter(ch)){
                    f = freqs.get(ch);
                    if (f == null) {
                        freqs.put(ch, 0);   
                    }
                    else {
                        freqs.put(ch, ++f);
                    }
                }
            }
        }
        in.close();
        return freqs;
    }

    public static void main(String[] args) throws IOException{
        Map<Character, Integer> freqs = countLetters("filename.txt");
        Set<Character> keySet = freqs.keySet();
        for (Character key : keySet) {
                    System.out.println("Char: " + key + "  Count: " + freqs.get(key));
        }

    }
}