在C盤新建文件1.txt,輸入任意字符,如下圖:
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
編寫java代碼。如下:
import?java.io.BufferedReader;
import?java.io.FileNotFoundException;
import?java.io.FileReader;
import?java.io.IOException;
import?java.util.TreeMap;
public?class?Test?{
//?統(tǒng)計(jì)數(shù)字或者字符出現(xiàn)的次數(shù)
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文件行數(shù):?"?+?line);
System.out.println("\n文件內(nèi)容:?"?+?sb.toString());
TreeMapCharacter,?Integer?tm?=?Pross(sb.toString());
System.out.println("\n字符統(tǒng)計(jì)結(jié)果為:"?+?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();
}
}
}
}
}運(yùn)行結(jié)果如下圖:
其實(shí)直接把要統(tǒng)計(jì)的字?jǐn)?shù)放在一個(gè)字符串里就行了string str = "";
然后再用string的length方法就可以統(tǒng)計(jì)字符串長度了。
string str = "xxxxx";
int strlen = str.length();
system.out.print(strlen);
打印出來的數(shù)字就是所輸入的字?jǐn)?shù)(這里是包括標(biāo)點(diǎn)符號(hào)的,如果要去標(biāo)點(diǎn)空格可以用正則表達(dá)式)
123456789101112131415161718192021222324
public?static?void?main(String[]?args)?throws?IOException?{????????BufferedReader?br=new?BufferedReader(new?InputStreamReader(System.in));????????String?str=br.readLine();?????????int?countNum?=?0;//統(tǒng)計(jì)數(shù)字的個(gè)數(shù)????????int?countChar?=?0;//統(tǒng)計(jì)英文字母的個(gè)數(shù)????????int?countSpace?=?0;//統(tǒng)計(jì)空格的個(gè)數(shù)????????int?countOthers?=?0;//統(tǒng)計(jì)其它字符的個(gè)數(shù)????????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("數(shù)字個(gè)數(shù):"+countNum);????????System.out.println("英文字母?jìng)€(gè)數(shù):"+countChar);????????System.out.println("空格個(gè)數(shù):"+countSpace);????????System.out.println("其他字符個(gè)數(shù):"+countOthers);????}
一、問題分析:
輸入一行字母,那么會(huì)以換行結(jié)束。所以可以存入數(shù)組,也可以逐個(gè)輸入,遇到換行結(jié)束。
要統(tǒng)計(jì)各個(gè)類的個(gè)數(shù),就要逐個(gè)判斷是哪個(gè)分類的。
由于在ASCII碼中,數(shù)字,大寫字母,小寫字母分別連續(xù),所以可以根據(jù)邊界值判斷類型。
二、算法設(shè)計(jì):
1、讀入字符,直到遇到換行結(jié)束。
2、對(duì)于每個(gè)字符,判斷是字母還是數(shù)字,或者空格,或者是其它字符。
3、對(duì)于每個(gè)字符判斷后,對(duì)應(yīng)類別計(jì)數(shù)器自加。
4、最終輸出結(jié)果。
整個(gè)代碼就是為了統(tǒng)計(jì)字符串中各個(gè)字符出現(xiàn)的個(gè)數(shù)
Map
result
=
getCharMaps(s);
這個(gè)方法調(diào)用
主要是看這個(gè)方法
public
static
Map
getCharMaps(String
s)
{
Map
map
=
new
HashMap();
//定義一個(gè)map
for(int
i
=
0;
i
s.length();
i++)
{
//
下面的代碼主要是循環(huán)字符串,一次取出每一個(gè)字符
Character
c
=
s.charAt(i);
//獲取對(duì)應(yīng)的字符
Integer
count
=
map.get(c);
//獲取字符對(duì)應(yīng)出現(xiàn)的次數(shù)
map.put(c,
count
==
null
?
1
:
count
+
1);
//如果之前出現(xiàn)過,則加1,否則直接賦1
}
return
map;
//返回最終的map
}