在C盤新建文件1.txt,輸入任意字符,如下圖:
站在用戶的角度思考問題,與客戶深入溝通,找到元寶網站設計與元寶網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:成都網站設計、網站制作、企業官網、英文網站、手機端網站、網站推廣、主機域名、網絡空間、企業郵箱。業務覆蓋元寶地區。
編寫java代碼。如下:
import?java.io.BufferedReader;
import?java.io.FileNotFoundException;
import?java.io.FileReader;
import?java.io.IOException;
import?java.util.TreeMap;
public?class?Test?{
//?統計數字或者字符出現的次數
public?static?TreeMapCharacter,?Integer?Pross(String?str)?{
char[]?charArray?=?str.toCharArray();
TreeMapCharacter,?Integer?tm?=?new?TreeMapCharacter,?Integer();
for?(int?x?=?0;?x??charArray.length;?x++)?{
if?(!tm.containsKey(charArray[x]))?{
tm.put(charArray[x],?1);
}?else?{
int?count?=?tm.get(charArray[x])?+?1;
tm.put(charArray[x],?count);
}
}
return?tm;
}
public?static?void?main(String[]?args)?{
BufferedReader?br?=?null;
int?line?=?0;
String?str?=?"";
StringBuffer?sb??=?new?StringBuffer();
try?{
br?=?new?BufferedReader(new?FileReader("c:\\1.txt"));
while?((str?=?br.readLine())?!=?null)?{
sb.append(str);
++line;
}
System.out.println("\n文件行數:?"?+?line);
System.out.println("\n文件內容:?"?+?sb.toString());
TreeMapCharacter,?Integer?tm?=?Pross(sb.toString());
System.out.println("\n字符統計結果為:"?+?tm);
}?catch?(FileNotFoundException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}?finally?{
if?(br?!=?null)?{
try?{
br.close();
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
}
}
}運行結果如下圖:
整個代碼就是為了統計字符串中各個字符出現的個數
MapCharacter, Integer result = getCharMaps(s); 這個方法調用
主要是看這個方法
public static MapCharacter, Integer getCharMaps(String s) {
MapCharacter, Integer map = new HashMapCharacter, Integer(); //定義一個map
for(int i = 0; i s.length(); i++) { // 下面的代碼主要是循環字符串,一次取出每一個字符
Character c = s.charAt(i); //獲取對應的字符
Integer count = map.get(c); //獲取字符對應出現的次數
map.put(c, count == null ? 1 : count + 1); //如果之前出現過,則加1,否則直接賦1
}
return map; //返回最終的map
}
123456789101112131415161718192021222324
public?static?void?main(String[]?args)?throws?IOException?{????????BufferedReader?br=new?BufferedReader(new?InputStreamReader(System.in));????????String?str=br.readLine();?????????int?countNum?=?0;//統計數字的個數????????int?countChar?=?0;//統計英文字母的個數????????int?countSpace?=?0;//統計空格的個數????????int?countOthers?=?0;//統計其它字符的個數????????for?(int?i?=?0;?i??str.length();?i++)?{????????????char?c?=?str.charAt(i);????????????if?(c?=?'0'??(int)?c?=?'9')?{????????????????countNum++;????????????}?else?if?((c?=?'a'??c?=?'z')||(c?=?'A'??c?=?'Z'))?{????????????????countChar++;????????????}?else?if?(c?==?'?')?{????????????????countSpace++;????????????}?else{????????????????countOthers++;????????????}????????}????????System.out.println("數字個數:"+countNum);????????System.out.println("英文字母個數:"+countChar);????????System.out.println("空格個數:"+countSpace);????????System.out.println("其他字符個數:"+countOthers);????}
一、問題分析:
輸入一行字母,那么會以換行結束。所以可以存入數組,也可以逐個輸入,遇到換行結束。
要統計各個類的個數,就要逐個判斷是哪個分類的。
由于在ASCII碼中,數字,大寫字母,小寫字母分別連續,所以可以根據邊界值判斷類型。
二、算法設計:
1、讀入字符,直到遇到換行結束。
2、對于每個字符,判斷是字母還是數字,或者空格,或者是其它字符。
3、對于每個字符判斷后,對應類別計數器自加。
4、最終輸出結果。