java中scanner与hashmap_Java中HashMap的使用练习
問題:
給定任意一個字符串“today is a special day”,長度為任意,要求找出其出現(xiàn)次數(shù)最多的字符及計算次數(shù)。(可以用HashMap,HashSet,Collections實現(xiàn))
解決:利用HashMap和HashSet解決。
代碼:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class HashMapDemo {
/**
* @param args
* @author Wentasy
* @since 2012年4月23日17:36:53
* 給定任意一個字符串“today is a special day”,
* 長度為任意,要求找出其出現(xiàn)次數(shù)最多的字符及計算次數(shù)。
* (可以用HashMap,HashSet,Collections實現(xiàn))
*/
public static void main(String[] args) {
countChar();
}
public static void countChar(){
Scanner scan = new Scanner(System.in);//構(gòu)造輸入流
String str = "";//接受從鍵盤輸入的字符串
System.out.println("請輸入一行字符串:");
//str = scan.next();//注意:使用next方法如果你輸入的字符串包括空格,則你將得到錯誤的結(jié)果
str = scan.nextLine();
HashMap map = new HashMap();//創(chuàng)建HashMap對象
for (int i = 0; i < str.length(); i++) {
Character ch = new Character(str.charAt(i));//截取第i個位置的字符
Integer val = new Integer(1);//記錄出現(xiàn)次數(shù)的變量
Integer oldVal = map.put(ch, val);//把出現(xiàn)次數(shù)放到Map中
//put方法返回與 key 關(guān)聯(lián)的舊值;如果 key 沒有任何映射關(guān)系,則返回 null。(返回 null 還可能表示該映射之前將 null 與 key 關(guān)聯(lián)。)
if (oldVal != null){
map.put(ch, oldVal + 1);//如果不為空,將加1的舊指放到Map中
}
}
System.out.println(map);//打印存放字符和出現(xiàn)次數(shù)的映射關(guān)系
int max = 0;//出現(xiàn)次數(shù)的最大值
Character ch1 = null;//記錄出現(xiàn)次數(shù)最多的字符
Set set = new HashSet();//創(chuàng)建Set對象
set = map.keySet();//將Map轉(zhuǎn)為Set對象
Iterator it = set.iterator();//獲得Set對象的迭代器
while (it.hasNext()){
Character ch = (Character)it.next();//獲取元素
Integer pos = map.get(ch).intValue();//通過Key查找Value
//逐一比較,找出現(xiàn)次數(shù)最多的字符和出現(xiàn)次數(shù)
if (pos > max){
max = pos;
ch1 = ch;
}
}
//打印結(jié)果
System.out.println("字符串" + str + "中出現(xiàn)最多的字符是:" + ch1 + "\n" + "出現(xiàn)次數(shù)為:" + max);
}
}
運行效果截圖:
遇到的問題說明:
在利用Scanner接收輸入的字符串時,有兩種方式
str = scan.next();
str = scan.nextLine();
如果采用next方法的話,如果你輸入的字符串包括空格,則你將得到錯誤的結(jié)果。
原因如下:
next()一定要讀取到有效字符后才可以結(jié)束輸入,對輸入有效字符之前遇到的空格鍵、Tab鍵或Enter鍵等結(jié)束符,next()方法會自動將其去掉,只有在輸入有效字符之后,next()方法才將其后輸入的空格鍵、Tab鍵或Enter鍵視為分隔符或結(jié)束符;
而nextLine()方法的結(jié)束符只是Enter鍵,即nextLine()方法返回的是Enter鍵之前的所有字符。
總結(jié)
以上是生活随笔為你收集整理的java中scanner与hashmap_Java中HashMap的使用练习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WeChatTweak-微信小助手安装教
- 下一篇: Golang——error处理及pani