我正在编写一个读取字符串的程序,然后根据其在hashmap中的值将该字符串的每个字符转换为数字。
就像电话号码一样。我遇到的问题是它背后的逻辑,我似乎无法让它发挥作用。
我正在做的是将字符串转换为char数组,然后迭代它并抓住第一个字符。然后我在hashmap中找到与该字母对应的键并获取它的值。我将此值添加到我的空字(这将构建新字符串)。
似乎无法让它工作,已经工作了一段时间。谢谢你的帮助。
Hashmap值:映射为
public static void setUpHashmap(){
lettersToNumbers.put("abc", '2');
lettersToNumbers.put("def", '3');
lettersToNumbers.put("ghi", '4');
lettersToNumbers.put("jkl", '5');
lettersToNumbers.put("mno", '6');
lettersToNumbers.put("pqrs", '7');
lettersToNumbers.put("tuv", '8');
lettersToNumbers.put("wxyz", '9');
}
代码:
public static String convertCharStringToNumbers(String str){
char[] stringArray = str.toCharArray();
String word = "";
for (int i = 0; i < stringArray.length; i++){
char letter = stringArray[i];
if (lettersToNumbers.containsKey(letter)){
word+=lettersToNumbers.get(letter);
}
}
System.out.println(word.toString());
return word;
}
答案 0 :(得分:0)
您的方式:遍历Hashmap键(Eek)
for(String key : lettersToNumbers.keySet()) {
if(key.contains(String.valueOf(stringArray[i])){
//Do what you want
}
}
更好的方法:O(1)查找(使用Hashmaps的全部意义?)
将字符作为键存放在hashmap中并进行查找。
答案 1 :(得分:0)
快速和苛刻的hacK))
static HashMap<String,Character> lettersToNumbers = new HashMap<String, Character>();
public static String convertCharStringToNumbers(String str){
String[] stringArray = str.split("(?!^)");
String word = "";
for (String letter : stringArray) {
for (String s : lettersToNumbers.keySet()) {
if (s.contains(String.valueOf(letter))) {
word += lettersToNumbers.get(s);
}
}
}
System.out.println(word.toString());
return word;
}
public static void setUpHashmap(){
lettersToNumbers.put("abc", '2');
lettersToNumbers.put("def", '3');
lettersToNumbers.put("ghi", '4');
lettersToNumbers.put("jkl", '5');
lettersToNumbers.put("mno", '6');
lettersToNumbers.put("pqrs", '7');
lettersToNumbers.put("tuv", '8');
lettersToNumbers.put("wxyz", '9');
}
OR
static HashMap<Character, Integer> lettersToNumbers = new HashMap<Character, Integer>();
public static String convertCharStringToNumbers(String str){
char[] stringArray = str.toCharArray();
String word = "";
for (char letter : stringArray) {
if (lettersToNumbers.containsKey(letter)) {
word += lettersToNumbers.get(letter);
}
}
System.out.println(word.toString());
return word;
}
public static void setUpHashMap(){
for (int i=97, t = 2; i<121; i+=3, t++){
lettersToNumbers.put((char)i, t);
lettersToNumbers.put((char)(i+1), t);
lettersToNumbers.put((char)(i+2), t);
}
lettersToNumbers.put((char)(122), 9);
}
如果abc == 1,那么t = 1或者如果abc == 2(我的电话怎么样),那么t = 2.
答案 2 :(得分:0)
假设您在节目中输入一个字符串,请说&#34; xyzuuabc&#34;然后程序打印出相应的映射数字&#34; 47855213&#34;。
String name = "";
Map<Character, String> lettersToNumbers = new HashMap<Character, String>();
lettersToNumbers.put('a', "2");
lettersToNumbers.put('x', "4");
lettersToNumbers.put('u', "5");
lettersToNumbers.put('b', "1");
lettersToNumbers.put('c', "3");
lettersToNumbers.put('y', "7");
lettersToNumbers.put('z', "8");
String enteredString = "xyzuuabc";
char[] splitNum = enteredString.toCharArray();
for (int i = 0; i < splitNum.length; i++) {
if (lettersToNumbers.containsKey(splitNum[i])) {
name += lettersToNumbers.get(splitNum[i]);
}
}
System.out.println(name);
}
答案 3 :(得分:-1)
您的集合包含类似(“abc”,2)的条目,但每次调用函数convertCharStringToNumber时,您都在检查映射是否一次包含一个字符,因此如果发送的字符串是“atq”,则表示检查键a,t和q。但是,您创建的地图中不存在这些键。相反,如果地图看起来像:
lettersToNumbers.put("a",2);
lettersToNumbers.put("b",2");
lettersToNumbers.put("c",2";
//continue for the rest of the alphabet
然后键实际上会包含在地图中。