希望打印結果:a(1)c(2).....
package week6homeworks;
/**
* @author LYB
* 1."sdfgzxcvasdfxcvdf"獲取該字符串中的字母出現的次數。
* 希望打印結果:a(1)c(2).....
*
* 思路:
* 因此對於結果的分析發現,字母和次數之間存在着映射關係,而且這種關係很對。
* 很多就需要存儲,能存儲映射關係的容器有數組和Map集合。關係一方式有序編號嗎?沒有!
* 那就是使用Map集合。又發現可以保證唯一性的一方具備着順序如:a bc ...
* 所以可以使用TreeMap集合。
* 這個集合最終應該存儲的是字母和次數的對應關係。
* 1,因爲操作的是字符串中的字母,所以先將字符串變成字符數組。
* 2,遍歷字符數組,用每一個字母作爲鍵去查詢Map集合這個表。
* 如果該字母鍵不存在,就將該字母作爲鍵1作爲值存儲到Map集合中。
* 如果該字母存在,就將該字母鍵對應值取出來並+1,再將該字母和+1後的值存儲到Map集合中,
* 鍵相同值會覆蓋。這樣就記錄了該字母的次數。
*/
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class PrintString {
public static void main(String[] args) {
// String str = "sdfgzxcvasdfxcvdf";
Scanner input = new Scanner(System.in);
System.out.println("請輸入字符串:");
String str = input.next();
String s = getCharCount(str);
System.out.println(s);
}
/*
* 獲取字符串中每個字母對應個數的函數
*/
public static String getCharCount(String str) {
// TODO Auto-generated method stub
//str轉換爲字符串數組
char[] chs = str.toCharArray();
Map<Character,Integer> map = new TreeMap<>();
for (int i = 0; i < chs.length; i++) {
int count = 1;
Integer value = map.get(chs[i]);
if(value != null){
count = value+1;
}
// count++;
map.put(chs[i], count);
}
// for (int i = 0; i < chs.length; i++) {
// Integer value = map.get(chs[i]);
// int count = 1;
// if(!map.containsKey(chs[i])){
// count = value+1;
// }
// map.put(chs[i], count);
// }
// for (int i = 0; i < chs.length; i++) {
// Integer value = map.get(chs[i]);
// if(value == null){
// map.put(chs[i], value);
// }
// }
return mapToString(map);
}
//自定義map集合打印出來的myToString()方法打印題目要求的結果
private static String mapToString(Map<Character,Integer> map) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
Iterator<Character> it = map.keySet().iterator();
while(it.hasNext()){
Character key = it.next();
Integer value = map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
}
2.每一個省份都對應着很多城市,要求:通過省份可以查詢出對應的城市;
通過城市也能查詢出所屬的省份。
package week6homeworks;
import java.util.Iterator;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import javax.management.RuntimeErrorException;
/**
*
* @author LYB
* 2.每一個省份都對應着很多城市,要求:
* 通過省份可以查詢出對應的城市;
* 通過城市也能查詢出所屬的省份。
*/
public class QueryResponse {
// static{
// Map<String,String[]> map = new HashMap<>();
// map.put("北京", new String[]{"北京"});
// map.put("天津", new String[]{"天津"});
// map.put("上海", new String[]{"上海"});
// map.put("重慶", new String[]{"重慶"});
// map.put("安徽省", new String[]{"合肥","宿州","淮北","阜陽","滁州"});
// map.put("福建省", new String[]{"福州","廈門","南平","三明","莆田"});
// map.put("甘肅省", new String[]{"蘭州","白銀","天水","酒泉","慶陽"});
// map.put("廣東省", new String[]{"廣州","深圳","清遠","韶關","潮州"});
// map.put("貴州省", new String[]{"貴陽","遵義","六盤水","畢節","安順"});
// map.put("河北省", new String[]{"石家莊","邯鄲","唐山","保定","秦皇島"});
// map.put("黑龍江省", new String[]{"哈爾濱","齊齊哈爾","黑河","大慶","鶴崗"});
// map.put("河南省", new String[]{"鄭州","洛陽","焦作","新鄉","商丘"});
// map.put("湖北省", new String[]{"武漢","黃岡","十堰","宜昌","荊門"});
// map.put("陝西省", new String[]{"西安","寶雞","銅川","延安","安康","漢中","榆林"});
// }
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
Map<String,String[]> map = new HashMap<>();
map.put("北京", new String[]{"北京"});
map.put("天津", new String[]{"天津"});
map.put("上海", new String[]{"上海"});
map.put("重慶", new String[]{"重慶"});
map.put("安徽省", new String[]{"合肥","宿州","淮北","阜陽","滁州"});
map.put("福建省", new String[]{"福州","廈門","南平","三明","莆田"});
map.put("甘肅省", new String[]{"蘭州","白銀","天水","酒泉","慶陽"});
map.put("廣東省", new String[]{"廣州","深圳","清遠","韶關","潮州"});
map.put("貴州省", new String[]{"貴陽","遵義","六盤水","畢節","安順"});
map.put("河北省", new String[]{"石家莊","邯鄲","唐山","保定","秦皇島"});
map.put("黑龍江省", new String[]{"哈爾濱","齊齊哈爾","黑河","大慶","鶴崗"});
map.put("河南省", new String[]{"鄭州","洛陽","焦作","新鄉","商丘"});
map.put("湖北省", new String[]{"武漢","黃岡","十堰","宜昌","荊門"});
map.put("陝西省", new String[]{"西安","寶雞","銅川","延安","安康","漢中","榆林"});
QueryResponse qur = new QueryResponse();
while (true) {
System.out.println("--------請選擇操作--------\n\t1.省份查詢\n\t2.城市查詢\n\t3.退出");
System.out.println("-------------------------");
System.out.println("輸入:");
String opString = sc.next();
switch (opString) {
case "1":
qur.getProvince(map);
break;
case "2":
qur.getCity(map);
break;
case "3":
System.exit(0);
break;
default:
System.out.println("輸入錯誤");
break;
}
}
}
private void getCity(Map<String,String[]> map) {
System.out.println("請輸入要查詢的城市:");
String city = sc.next();
if(city == null){
throw new RuntimeErrorException(null, "非法輸入!");
}else if(!map.containsValue(city)){
System.out.println("您輸入的城市不存在!");
}else{
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
String[] value = map.get(key);
System.out.println("城市爲: " + key.toString() + " 對應省份爲: " + value.toString());
}
}
}
private void getProvince(Map<String,String[]> map) {
System.out.println("請輸入要查詢的省份:");
String province = sc.next();
if(province == null){
throw new RuntimeErrorException(null,"非法輸入!");
}else if(!map.containsKey(province)){
System.out.println("您輸入的省份不存在!");
}else{
mapToString(map);
// Iterator<String> it = map.keySet().iterator();
// while(it.hasNext()){
// String key = it.next();
// String[] Value = map.get(key);
// System.out.println("省份爲:"+key+"對應城市爲:"+Value);
// }
}
}
private static String mapToString(Map<String, String[]> map) {
StringBuilder sb = new StringBuilder();
Iterator<String> it = map.keySet().iterator();
while(it.hasNext()){
String key = it.next();
String[] value = map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
}