Java StringBuffer-使用字符进行追加返回null

Java StringBuffer-使用字符进行追加返回null,java,Java,我似乎找不到这个问题的答案——如果这个问题已经被问到,我道歉 在下面的Java代码中,我试图编写一个方法,返回数字值(作为字符串),该值本应在移动键盘上按下以生成输入字符串,例如“cab”->222 HashMap不是空的,但是在附加到StringBuffer对象sbf之后,当我在main中打印wordToSignature(“cab”)时,它返回null 问题似乎出在.charAt(i)代码上。当我在没有word.charAt(I)的情况下测试append时,它执行append并打印HashM

我似乎找不到这个问题的答案——如果这个问题已经被问到,我道歉

在下面的Java代码中,我试图编写一个方法,返回数字值(作为字符串),该值本应在移动键盘上按下以生成输入字符串,例如“cab”->222

HashMap不是空的,但是在附加到StringBuffer对象sbf之后,当我在main中打印wordToSignature(“cab”)时,它返回null

问题似乎出在.charAt(i)代码上。当我在没有word.charAt(I)的情况下测试append时,它执行append并打印HashMap中的值

如果有人能指出我的错误,我将不胜感激

提前谢谢

public static String wordToSignature(String word) {

    HashMap <String, String> keypad = new HashMap <String, String>();

    keypad.put("a", "2"); keypad.put("b", "2"); keypad.put("c", "2");
    keypad.put("d", "3"); keypad.put("e", "3"); keypad.put("f", "3");
    keypad.put("g", "4"); keypad.put("h", "4"); keypad.put("i", "4");
    keypad.put("j", "5"); keypad.put("k", "5"); keypad.put("l", "5");
    keypad.put("m", "6"); keypad.put("n", "6"); keypad.put("o", "6");
    keypad.put("p", "7"); keypad.put("q", "7"); keypad.put("r", "7"); keypad.put("s", "7");
    keypad.put("t", "8"); keypad.put("u", "8"); keypad.put("v", "8");
    keypad.put("w", "9");   keypad.put("x", "9");   keypad.put("y", "9"); keypad.put("z", "9");

    StringBuffer sbf = new StringBuffer("");

    for(int i = 0; i < word.length(); i++) {
        sbf.append(keypad.get(word.charAt(i)));
    }
    return sbf.toString();
}
公共静态字符串字ToSignature(字符串字){
HashMap键盘=新的HashMap();
键盘。放(a),(2);键盘。放(b),(2);键盘。放(c),(2);
小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘;
小键盘。放(“g”,“4”);小键盘。放(“h”,“4”);小键盘。放(“i”,“4”);
小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘;
键盘输入(“m”,“6”);键盘输入(“n”,“6”);键盘输入(“o”,“6”);
键盘.放(p,7);键盘.放(q,7);键盘.放(r,7);键盘.放(s,7);
键盘。输入(“t”,“8”);键盘。输入(“u”,“8”);键盘。输入(“v”,“8”);
小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘。小键盘;
StringBuffer sbf=新的StringBuffer(“”);
for(int i=0;i
试试这个:

HashMap<Character, String> keypad = new HashMap<Character, String>();
keypad.put('a', "2"); keypad.put('b', "2"); keypad.put('c', "2");
// and so on - notice the single quotes!
HashMap keypad=newhashmap();
键盘输入('a','2');键盘输入('b','2');键盘输入('c','2');
//等等——注意单引号!

如果要迭代
字符串的字符
,则不妨将
字符
s而非
字符串
s作为键存储在
映射中

尝试以下操作,而不是在小键盘哈希映射中使用字符串使用字符

public static String wordToSignature(String word) {

    HashMap <Character, String> keypad = new HashMap <Character, String>();

    keypad.put('a', "2"); keypad.put('b', "2"); keypad.put('c', "2");
    keypad.put('d', "3"); keypad.put('e', "3"); keypad.put('f', "3");
    keypad.put('g', "4"); keypad.put('h', "4"); keypad.put('i', "4");
    keypad.put('j', "5"); keypad.put('k', "5"); keypad.put('l', "5");
    keypad.put('m', "6"); keypad.put('n', "6"); keypad.put('o', "6");
    keypad.put('p', "7"); keypad.put('q', "7"); keypad.put('r', "7"); keypad.put('s', "7");
    keypad.put('t', "8"); keypad.put('u', "8"); keypad.put('v', "8");
    keypad.put('w', "9");   keypad.put('x', "9");   keypad.put('y', "9"); keypad.put('z', "9");

    StringBuffer sbf = new StringBuffer("");

    for(int i = 0; i < word.length(); i++) {
        sbf.append(keypad.get(word.charAt(i)));
    }
    return sbf.toString();
}
公共静态字符串字ToSignature(字符串字){
HashMap键盘=新的HashMap();
键盘.put('a','2');键盘.put('b','2');键盘.put('c','2');
键盘.put('d','3');键盘.put('e','3');键盘.put('f','3');
键盘.put('g','4');键盘.put('h','4');键盘.put('i','4');
键盘.put('j','5');键盘.put('k','5');键盘.put('l','5');
小键盘.put('m','6');小键盘.put('n','6');小键盘.put('o','6');
小键盘.put('p','7');小键盘.put('q','7');小键盘.put('r','7');小键盘.put('s','7');
小键盘.put('t','8');小键盘.put('u','8');小键盘.put('v','8');
键盘.put('w','9');键盘.put('x','9');键盘.put('y','9');键盘.put('z','9');
StringBuffer sbf=新的StringBuffer(“”);
for(int i=0;i
^
String#charAt(int)
返回一个
char
。您已经在地图中存储了
String
键。啊,感谢您指出这一点。非常感谢,这解决了问题。对不起,我是初学者,但问题是什么?@ USS342439如果这个答案解决了你的问题,请考虑一下,只需点击左边的复选标记就可以了。用户3742439问题是,当您调用
word.charAt(i)
时,它返回一个
char
,但映射使用了
字符串作为键。两种类型必须一致,解决此问题的最简单方法是使用
char
作为密钥。感谢您的帮助,非常感谢。