题目:
输入:这个问题只有一个测试案例,包括两部分,字典部分和书籍部分。字典部分有”START“字符串所在的一行开头,跟随一些行,每一行有两个字符串,一个是英语单词,另一个 是对应的火星文。一个写着“END”的一行表示字典部分的结束。书籍部分也以“START”所在的行为开始,中间为火星文写的一段话。你要通过字典将其翻译为英文。如果这个词在字典中你应该翻译它,如果不存在,不用翻译,直接复制到你的翻译中。空格制表换行符还有标点符号不需要翻译。一个写有"END"的行表示书籍的结束,也表示输入的结束。所有词都是小写,每个词最多包含10个字符,每一行最多有3000个字符。
输出:在这个问题中,你需要输出这段历史书。。
Sample Input
STARTfrom fiwo hello difh mars riwosf earth fnnvk like fiiwj END START difh, i'm fiwo riwosf. i fiiwj fnnvk! END
Sample Output
hello, i'm from mars. i like earth!
import java.util.*;
public class Main1075 {
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<String, String>();
Scanner cin = new Scanner(System.in);
if (cin.next().equals("START")) {
String word;
while (!(word = cin.next()).equals("END")) { //将start和end 之间的所有火星文-地球文对存入map
hm.put(cin.next(), word);
}
}
cin.nextLine();
if (cin.nextLine().equals("START")) {
String word;
while (!(word = cin.nextLine()).equals("END")) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < word.length(); i++) {
char zm = word.charAt(i); //每次读入一行,并将一行的每个字符进行判断
if (zm <= 'z' && zm >= 'a') {
sb.append(zm);
}
if (!(zm <= 'z' && zm >= 'a')) { //直到读到一个非a~z的字符,将之前读入的字符组成单词进行查阅
if (sb != null && hm.get(sb.toString()) != null)
System.out.print(hm.get(sb.toString()));
else
System.out.print(sb); //如果字典中存在给字符串,则替换,否则原样输出
sb.delete(0, sb.length());
System.out.print(zm);
}
}
System.out.println(); //记得输出一个换行符,接着读取下一行,并在下一行输出
}
}
}
}