我有一个可以编码的莫尔斯电码程序。现在,我想对其进行解码,但是我不知道如何用哈希映射中的字母替换一串加密字符。
这是解码方法:
for(int i = 0; i < userInput.length(); i++){
if(i != 0){
morse.append(' ');
}
morse.append(codeLibrary.get(userInput.charAt(i))); //Currentely the same as encoding, this line needs to change
}
return morse.toString();
这是我的哈希图:
public static final java.util.Map<Character, String> codeLibrary;
static{
codeLibrary = new HashMap<>();
codeLibrary.put('a',".-"); codeLibrary.put('b',"-...");
codeLibrary.put('c',"-.-."); codeLibrary.put('d',"-..");
codeLibrary.put('e',"."); codeLibrary.put('f',"..-.");
codeLibrary.put('g',"--."); codeLibrary.put('h',"....");
codeLibrary.put('i',".."); codeLibrary.put('j',".---");
codeLibrary.put('k',"-.-"); codeLibrary.put('l',".-..");
codeLibrary.put('m',"--"); codeLibrary.put('n',"-.");
codeLibrary.put('o',"---"); codeLibrary.put('p',".--.");
codeLibrary.put('q',"--.-"); codeLibrary.put('r',".-.");
codeLibrary.put('s',"..."); codeLibrary.put('t',"-");
codeLibrary.put('u',"..-"); codeLibrary.put('v',"...-");
codeLibrary.put('w',".--"); codeLibrary.put('x',"-..-");
codeLibrary.put('y',"-.--"); codeLibrary.put('z',"--..");
codeLibrary.put('1',".----"); codeLibrary.put('2',"..---");
codeLibrary.put('3',"...--"); codeLibrary.put('4',".----");
codeLibrary.put('5',"....."); codeLibrary.put('6',"-....");
codeLibrary.put('7',"--..."); codeLibrary.put('8',"---..");
codeLibrary.put('9',"----."); codeLibrary.put('0',"-----");
codeLibrary.put(' ',"/");
您将需要一个单独的Map,一个Map是一个Map<String, Character>
,再一个aHashMap<String, Character>
可以正常工作,用el填充它
如果这是学校的任务,那么我认为这是解决方案。如果这是用于实际应用程序,那么,继续,按照Jake King的建议使用Guava BiMap库。
编辑
你问:
这似乎是很长的路要走。不能插入值来检索密钥吗?
那不是普通地图的工作方式。您使用键来获取值,而不是相反。但这并不难,也不是很“长”。您甚至可以在同一循环中填充两个地图。
例如,...
import java.util.HashMap;
import java.util.Map;
public class MorseFun {
public static final String[] LETTER_CODES = { ".-", "-...", "-.-.", "-..",
".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.",
"---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--",
"-..-", "-.--", "--.." };
public static final String[] NUMBER_CODES = { "-----", ".----", "..---",
"...--", ".----", ".....", "-....", "--...", "---..", "----." };
private static Map<Character, String> charToCodeMap = new HashMap<>();
private static Map<String, Character> codeToCharMap = new HashMap<>();
public static void main(String[] args) {
for (int i = 0; i < LETTER_CODES.length; i++) {
char c = (char) ('a' + i);
String s = LETTER_CODES[i];
charToCodeMap.put(c, s);
codeToCharMap.put(s, c);
}
for (int i = 0; i < NUMBER_CODES.length; i++) {
char c = (char) ('0' + i);
String s = LETTER_CODES[i];
charToCodeMap.put(c, s);
codeToCharMap.put(s, c);
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句