输入法查找
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");
}
}
}
}
}
}
对于如下编码表:
用户输入拼音: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");
}
}
}
}
}
}
相关文章推荐
- 【codevs】p3115 高精度练习之减法
- MyBatis 3学习
- 第50讲:Scala中Variance变化点
- android点滴记录
- hdu1016 数据结构之面向过程的深搜算法
- Java(08-6)
- iOS学习--UIScrollView 原理详解
- 数据可视化中的图形选择
- [置顶] 为什么取名骆驼?
- HDU1685Booksort(IDA* 搜索)
- poj 1008 Maya Calendar(转换)
- JAVA中的几个排序算法
- hdu 1312 Red and Black(DFS)
- NOI 2015
- 成都美食记录
- NOI 2015 分类: noi 2015-08-06 22:22 14人阅读 评论(0) 收藏
- 《现代操作系统》精读与思考笔记 第五章 输入/输出
- QString将中文传给std::string
- hadoop知识点总结
- 使用Drawable实时画时钟