您的位置:首页 > 其它

输入法查找

2015-08-06 22:25 405 查看
输入法是根据用户的键入的拼音及选字编号在编码表中查找到对应的字或词组。

 对于如下编码表:

用户输入拼音:xin2,则返回:心

啊_a

爱_ai

矮_ai

哀悼_aidao

西_xi

洗_xi

细_xi

新_xin

心_xin

欣_xin

信_xin 

约束

1. 编码表以纯文本文件方式表示。

2. 编码表每行表示一个字或词组的拼音编码信息,每行中字或词组与拼音编码间使用下划线分隔,如:哀悼_aidao

 输入

1. 用户输入拼音串只能是一个字串,如:a1,再如:aidao1,再如:xi2. 用户输入拼音串如果没有编号,则给出前5个字或词组,以;隔开,少于5个的话,有几个就显示几个。如输入:xi,输出:西;洗;细 注:程序输入格式如下(示例请参考:输入说明):Code<编码表(每行表示一个字或词组的拼音编码信息,如:哀悼_aidao)>Search<拼音输入,如:aidao1>End 

输出:1. 按照用户输入的拼音串返回编码表中的字或词,如输入:xi,输出:西;洗;细。再如输入:aidao1,输出:哀悼

2. 当输入在编码表中无法找到对应的编码时,输出为:Error

3. 用户输入字串可能在编码表中不存在,如lux,这时需要输出:Error4. 大小写敏感,找不到对应的拼音,输出:Error

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Main {

public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String flag = "0";
Map<String,String> map = new LinkedHashMap<String,String>();
List<String> list = new ArrayList<String>();
while(true){
String str = scan.next();
if(str.equals("Code")){
flag = "Code";
}else if(str.equals("Search")){
flag = "Search";
}else if(str.equals("End")){
if(list.size()>5){
for(int i=0;i<4;i++){
System.out.print(list.get(i)+";");
}
System.out.print(list.get(4));
}else{
for(int i=0;i<list.size()-1;i++){
System.out.print(list.get(i)+",");
}
System.out.print(list.get(list.size()-1));
}
break;
}else{
if(flag.equals("Code")){
try{
String[] res = str.split("_");
map.put(res[0], res[1]);
}catch(Exception e){
list.add("Error");
}
}else if(flag.equals("Search")){
if(map.containsValue(str)){
Set<Map.Entry<String,String>> entrySet = map.entrySet();

for(Map.Entry<String, String> entry:entrySet){
if(entry.getValue().equals(str)){
list.add(entry.getKey());
}
}
}else{
list.add("Error");
}
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: