文件核心Java编程中每行中字母的最高频率

文件核心Java编程中每行中字母的最高频率,java,Java,人满为患, 需要Java建议和代码来读取文件(file.txt)并向控制台打印文件每行中出现频率最高的所有字母的列表,然后是频率 字母列表应该是按字母顺序排列的大写字母列表,然后是按字母顺序排列的小写字母列表 示例输入文件(File.txt) 在单行道上向后骑自行车时,如果 一艘独木舟的车轮坠落,需要多少个滚珠轴承才能装满 在水牛身上爬吗? 你好,霍华德 样本输出 e6 al 7 a 3 二氧化氯 示例代码: public class ReadFileFromSystem{ p

人满为患,

需要Java建议和代码来读取文件(file.txt)并向控制台打印文件每行中出现频率最高的所有字母的列表,然后是频率

字母列表应该是按字母顺序排列的大写字母列表,然后是按字母顺序排列的小写字母列表


示例输入文件(File.txt) 在单行道上向后骑自行车时,如果 一艘独木舟的车轮坠落,需要多少个滚珠轴承才能装满
在水牛身上爬吗?
你好,霍华德


样本输出 e6
al 7
a 3
二氧化氯

示例代码:

public class ReadFileFromSystem{

      public static void main(String args[]){
           BufferedReader in = new BufferedReader(new FileReader("C:/input.txt"));//the file containing lines.
       HashMap<Character,Integer> lettercount = new HashMap<Character, Integer>();
           int counter =0;


           // string buffer for file reading   
           StringBuffer str;

           // reading line by line from file    
           while ((str = in.readLine()) != null) { 
                // process each characters  
                 for (int i = 0; i < str.length(); i++) {
                          char c = str.charAt(i);                 
                          if (Character.isLetter(c)){
                              if(counter>1){       
                                   counter++;                           
                          }else{
                                 lettercount.put(c,1);                            
                          }                          
                }
           }
           System.out.println("The Alphabet"+c+" has a highest frequency of "+counter); 
     } 
公共类ReadFileFromSystem{
公共静态void main(字符串参数[]){
BufferedReader in=new BufferedReader(new FileReader(“C:/input.txt”);//包含行的文件。
HashMap lettercount=新HashMap();
int计数器=0;
//用于文件读取的字符串缓冲区
StringBuffer str;
//从文件中逐行读取
而((str=in.readLine())!=null){
//处理每个字符
对于(int i=0;i1){
计数器++;
}否则{
字母计数。put(c,1);
}                          
}
}
System.out.println(“字母“+c+”的最高频率为“+计数器”);
} 
提示:

  • 考虑为每一行读取填充一个
    映射
    ,映射中的整数值表示遇到的每个字符的频率
  • 在填充
    地图时
    可以记住迄今为止遇到的最高频率(例如5)
  • 填充
    映射后
    可以遍历其内容并打印频率等于遇到的最高频率的任何字母

祝你好运!

看起来你几乎拥有了它。你需要在
循环中初始化一个新的映射,同时在
for
循环中使用它来收集数据

您只使用了一个计数器变量。相反,您需要使用映射来保存多个计数器,每个字符一个计数器

以下是您要执行的psuedo代码:

for each line in the file:
    initialize an empty Map<String, Integer>
    for each character in the line:
        if the map contains the character:
            increment the count for that char in the map
        else:
            add the character to the map with a count of 1
    iterate through the map and find the highest values, and print their keys

在此结束时,字符串
字符
将包含行中重复次数最多的字符。
maxCount
将包含计数。

这是家庭作业吗?如果是,请添加适当的标记。您需要建议还是代码?(即,您想学习,还是只想将代码复制到作业中?)但是解决起来并不容易,我已经尝试过解决这个问题。如何为如此复杂的过程维护数据结构。如何存储字母的最高频率在每一行的文件中,我不认为这是直截了当的,因为我已经详细地编写了代码,你可以帮助我进一步…我被困在你的进一步。你们可以改进我的代码吗?请在这之后我需要帮助。我迷失了你可以修改我的代码,让我知道我犯了什么错误,请我想从我的代码中得到答案jjngguy@jjnguy,我看到了updates到你的帖子顶部。你能粘贴我的代码并修改它,然后告诉我答案是什么吗。我正在努力使这个结尾部分正确。@Deepak,我已经添加了一个例子,说明你的for循环应该是什么样子。感谢所有Stackoverflow memebers,u使之成为可能。遍历映射并找到最高值,然后打印它们的keys--您也可以共享此部分的代码吗
lettercount = new HashMap<Character, Integer>();
for (int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);                 
    if (Character.isLetter(c)){
        if(lettercount.containsKey(c)){       
            lettercount.get(c)++;                         
        }else
            lettercount.put(c,1);                            
    }                          
}
// here we find the max occurances
int maxCount = 0;
for(Integer count: lettercount.values())
    if (count > maxCount) maxCount = count;
// now we find the entries that had that many occurances
String characters = "";
for (Entry<Character, Integer> entry: lettercount.entrySet()) {
    if (entry.getValue().equals(maxCount))
        characters += entry.getKey();
}