将String转换为hashmap中的值

时间:2015-02-27 04:12:51

标签: java arrays string for-loop hashmap

我正在编写一个读取字符串的程序,然后根据其在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;

}

4 个答案:

答案 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

然后键实际上会包含在地图中。