当前位置:编程学习 > JAVA >>

『新手』检查一下句子的英文字..

我现在学习JAVA中,所以有一些问题不慬。

input: "June, July and August"

output: 4 u, 2 J, 2 n (有分大小草)

要检查一下句子中,出现最多次數的3個英文字..

我只慬写出
import java.util.Scanner;
public class Task_2 {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);

System.out.print("Input the word: " );
word = input.next();

不知道应该怎样用array去写 

希望大哥们可以教教我 --------------------编程问答-------------------- 先按逗号分割输入
然后
word.toCharArray 
然后 循环每一个char数组,按字母存map,其中value存个数
OK了 --------------------编程问答--------------------
import javax.swing.JOptionPane;
public class test {
    
    public static void main(String[] args) {
    
      String words = JOptionPane.showInputDialog(null,"Write a sentence." );
      String lower = words.toLowerCase();
      char[] ch = lower.toCharArray();
      int[] freq = new int[26];
      for(int i = 0; i< ch.length;i++) 
      {
         if(ch[i] <= 122)
         {
            if(ch[i] >= 97)
            {
               freq[(ch[i]-97)]++;
            }
         }        
      }
      System.out.println("Total chars " + ch.length);
      for(int i = 0; i < 26; i++)
      {
         if(freq[i] != 0)
         
            System.out.println(freq[i] + "\t" + ((char)(i+97)));
         
         
      }      
   }
}

我只計算出小草的英文,不懂計算出大草的.
還有選出3個出現最多次的字母... --------------------编程问答-------------------- String lower = words.toLowerCase(); 这一步已将字母小写了,把这一行干掉。
--------------------编程问答-------------------- import java.util.Scanner;
public class test {
    
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    
      String words;
      System.out.print("Write a sentence/words : " );
      words = input.next();

      char[] ch = words.toCharArray();

      int[] freq = new int[26];
      for(int i = 0; i< ch.length;i++) 
      {
         if(ch[i] <= 90)
         {
            if(ch[i] >= 65)
            {
               freq[(ch[i]-65)]++;
            }
         }        
      }
      System.out.println("\nTotal chars " + ch.length);
      
   //this is just for styling the look of the output
      System.out.println("---------------------" + "\nFrequency\tAlphabet" + "\n---------   ---------");
      
   
      for(int i = 0; i < 26; i++)
      {
   //printing only those alphabets whose count is not '0'   
         if(freq[i] != 0)   
            System.out.println("   "+freq[i] + "\t\t    " + ((char)(i+65)));
      
     
      }      
   }
}

我將它們轉了大草,不過不能計算小草.. --------------------编程问答-------------------- 不能同時計算小草
--------------------编程问答--------------------
引用 5 楼 u013073588 的回复:
不能同時計算小草
分开做,直接将字符存map,大小写分开,最后拿value中前三的就可以了 --------------------编程问答-------------------- 我不懂什樣用map
大哥,,你可以教教我嗎  --------------------编程问答-------------------- int[] freq = new int[26]; 你可以new 26个位置,为什么不可以52个呢,同样的道理啊,这样大小写就都有了啊。加班中,如果晚上了你还没搞定,可以帮你写写看。
--------------------编程问答-------------------- 大哥,謝謝你,哪我再試試看,
等一會再請教你 

一起加油吧 --------------------编程问答-------------------- /*
   Description:  Counting the frequencies of the 52 English letters 
           & display the top three frequencies together with their letters.
*/

 import java.util.Scanner;
public class Task_2 {
    
    public static void main(String[] args) {
     Scanner input = new Scanner(System.in);
     String words;
    
    System.out.print("Input a sentence/words : " );
    words = input.next();
    
    int[] lettersArray = new int[128];
    for ( int i = 0; i < words.length(); i++ ) {
    
         char ch=  words.charAt(i);  
         int value = (int) ch;
     
         if (value >= 97 && value <= 122){
         lettersArray[ch-'a']++;        
        }
    }    
    System.out.println("\nTotal chars " + words.length());    
System.out.println("---------------------" + "\nFrequency\tAlphabet" 
                   + "\n---------   ---------");
    
    for (int i = 0; i < lettersArray.length; i++) {
      if(lettersArray[i]>0){
        
        System.out.println("   "+lettersArray[i] + "\t\t    " + ((char)(i+97)));
        
      }         
 }   
    }
}

mag哥,我已經重新改寫,不過真的不懂怎樣寫你的方法,,
我剛剛有看過map的資料.
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
不過不知道怎用的

所以請mag哥出手幫幫我 --------------------编程问答-------------------- Input a sentence/words : apple

Total chars 5
---------------------
Frequency   Alphabet
---------   ---------
   1            a
   1            e
   1            l
   2            p
=================================================
Input a sentence/words : do you like an APPLE?

Total chars 2
---------------------
Frequency   Alphabet
---------   ---------
   1            d
   1            o
==================================================
Input a sentence/words : APPLE

Total chars 5
---------------------
Frequency   Alphabet
---------   ---------

==================================================
--------------------编程问答-------------------- 简单的写了下,没有做输入的校验,仅供参考

Scanner sc = new Scanner(System.in);
System.out.print("Input a sentence/words : " );
String word = sc.nextLine();
char ca [] = word.toCharArray();
Map<Character, Integer> numMap = new HashMap<Character, Integer>();
for (char c : ca) {
    if (numMap.containsKey(c)) {
        numMap.put(c, numMap.get(c) + 1);
    } else {
        numMap.put(c, 1);
    }
}
System.out.println("----------------" + "\nFrequency\tAlphabet" 
    + "\n---------       ---------");
for (char c : numMap.keySet()) {
    System.out.println("    " + c + "               " + numMap.get(c));
}
--------------------编程问答-------------------- 謝謝mag哥 :)
不過不知道是不是我用JCreator LE的原因,所以有3點error 
cannot find symbol class Map , cannot find symbol class HashMap
{Map<Character, Integer> numMap = new HashMap<Character, Integer>();}

operator + cannot be applied to <any>.get,int
{if (numMap.containsKey(c)) {
        numMap.put(c, numMap.get(c) + 1);} --------------------编程问答--------------------
引用 12 楼 magi1201 的回复:
简单的写了下,没有做输入的校验,仅供参考

Scanner sc = new Scanner(System.in);
System.out.print("Input a sentence/words : " );
String word = sc.nextLine();
char ca [] = word.toCharArray();
Map<Character, Integer> numMap = new HashMap<Character, Integer>();
for (char c : ca) {
    if (numMap.containsKey(c)) {
        numMap.put(c, numMap.get(c) + 1);
    } else {
        numMap.put(c, 1);
    }
}
System.out.println("----------------" + "\nFrequency\tAlphabet" 
    + "\n---------       ---------");
for (char c : numMap.keySet()) {
    System.out.println("    " + c + "               " + numMap.get(c));
}


引用 12 楼 magi1201 的回复:
简单的写了下,没有做输入的校验,仅供参考

Scanner sc = new Scanner(System.in);
System.out.print("Input a sentence/words : " );
String word = sc.nextLine();
char ca [] = word.toCharArray();
Map<Character, Integer> numMap = new HashMap<Character, Integer>();
for (char c : ca) {
    if (numMap.containsKey(c)) {
        numMap.put(c, numMap.get(c) + 1);
    } else {
        numMap.put(c, 1);
    }
}
System.out.println("----------------" + "\nFrequency\tAlphabet" 
    + "\n---------       ---------");
for (char c : numMap.keySet()) {
    System.out.println("    " + c + "               " + numMap.get(c));
}


引用 12 楼 magi1201 的回复:
简单的写了下,没有做输入的校验,仅供参考

Scanner sc = new Scanner(System.in);
System.out.print("Input a sentence/words : " );
String word = sc.nextLine();
char ca [] = word.toCharArray();
Map<Character, Integer> numMap = new HashMap<Character, Integer>();
for (char c : ca) {
    if (numMap.containsKey(c)) {
        numMap.put(c, numMap.get(c) + 1);
    } else {
        numMap.put(c, 1);
    }
}
System.out.println("----------------" + "\nFrequency\tAlphabet" 
    + "\n---------       ---------");
for (char c : numMap.keySet()) {
    System.out.println("    " + c + "               " + numMap.get(c));
}


++ --------------------编程问答--------------------
引用 13 楼 u013073588 的回复:
謝謝mag哥 :)
不過不知道是不是我用JCreator LE的原因,所以有3點error 
cannot find symbol class Map , cannot find symbol class HashMap
{Map<Character, Integer> numMap = new HashMap<Character, Integer>();}

operator + cannot be applied to <any>.get,int
{if (numMap.containsKey(c)) {
        numMap.put(c, numMap.get(c) + 1);}
去 eclipse官网去下载个eclipse吧,用着方便 --------------------编程问答--------------------

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

这个加上面,Map和HashMap需要引入的 --------------------编程问答-------------------- 哦哦..明白了

然後選出3個出現最多次的字母是否用for 就ok了 --------------------编程问答-------------------- 我怕eclipse比較難用,所以我想從底學起 :)

聖誕節看看android的書,再學習一下 --------------------编程问答--------------------
引用 18 楼 u013073588 的回复:
我怕eclipse比較難用,所以我想從底學起 :)

聖誕節看看android的書,再學習一下
eclipse非常好用,底层是用记事本写,javac HelloWorld.java java HelloWorld  哈哈 基础打扎实,后面什么都好学,加油吧 --------------------编程问答-------------------- 好的..非常感謝mag哥的指導:)

不過我還有一個問題

選出3個出現最多次的字母是否用for 就ok了? --------------------编程问答--------------------
引用 20 楼 u013073588 的回复:
好的..非常感謝mag哥的指導:)

不過我還有一個問題

選出3個出現最多次的字母是否用for 就ok了?
可以直接拿出value值,将其排序,拿出最大的三个,然后根据map的取值去比对,就可以拿出三个最多的字母。我在想还有没有更好的方法呢 --------------------编程问答-------------------- 以我的知識只慬用Array.Sort --------------------编程问答--------------------
引用 22 楼 u013073588 的回复:
以我的知識只慬用Array.Sort
 先写出来,先把功能实现 --------------------编程问答--------------------
引用 23 楼 magi1201 的回复:
Quote: 引用 22 楼 u013073588 的回复:

以我的知識只慬用Array.Sort
 先写出来,先把功能实现


Yes mag Sir ,
我現在努力中,thank you very much --------------------编程问答--------------------

Scanner sc = new Scanner(System.in);
System.out.print("Input a sentence/words : " );
String word = sc.nextLine();
char ca [] = word.toCharArray();
Map<Character, Integer> numMap = new HashMap<Character, Integer>();
for (char c : ca) {
    if (numMap.containsKey(c)) {
        numMap.put(c, numMap.get(c) + 1);
    } else {
        numMap.put(c, 1);
    }
}

List<Integer> list = new ArrayList<Integer>();
list.addAll(numMap.values());
Collections.sort(list);
list = list.subList(list.size()-3, list.size());
for (char c : numMap.keySet()) {
    for (Integer nu : list) {
        if (numMap.get(c) == nu) {
            System.out.println(c+ "    " + nu);
            break;
        }
    }
}
 供参考 --------------------编程问答--------------------

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

/**
 * input: "June, July and August"
 * 
 * output: 4 u, 2 J, 2 n (有分大小草)
 * 
 * 要检查一下句子中,出现最多次數的3個英文字..
 * 
 * 
 */
public class Test002 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Input a sentence/words : ");
String word = sc.nextLine();
output(word, 3);
sc.close();
}

/**
 * 检查一下句子中,出现最多次數的n個英文字
 * @param src
 *            源字符串
 * @param count
 *            出现最多次數英文字母个数
 */
static void output(String src, int count) {
if (src != null && count > 0) {
// 循环遍历,按照字符出现顺序依次添加
char[] arr = src.toCharArray();
Map<Character, Integer> map = new LinkedHashMap<Character, Integer>();
for (char c : arr) {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
}
// 根据map的value从大到小排序
List<Map.Entry<Character, Integer>> list = new LinkedList<Map.Entry<Character, Integer>>(
map.entrySet());
Collections.sort(list,
new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Entry<Character, Integer> o1,
Entry<Character, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
// 输出
// 如果字符串长度小于出现最多次數英文字母个数,则全部输出
int index = 0;
for (Map.Entry<Character, Integer> c : list) {
if (index < count) {
System.out.print("" + c.getValue() + c.getKey() + " ");
++index;
} else {
break;
}
}
}
}
}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,