【问题标题】:StringBuffer - append using charAt returns nullStringBuffer - 使用 charAt 追加返回 null
【发布时间】:2015-03-28 04:01:28
【问题描述】:

我似乎找不到这个问题的答案 - 如果这个问题已经被问过,我们深表歉意。

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

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

问题似乎出在 word.charAt(i) 代码上。当我在没有 word.charAt(i) 的情况下测试追加时,它会执行追加并打印 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();
}

【问题讨论】:

标签: java


【解决方案1】:

试试这个:

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!

如果您要遍历String字符,那么您最好将Characters 而不是Strings 作为键存储在Map 中。

【讨论】:

  • 非常感谢,问题已经解决。抱歉,我是初学者,但出了什么问题?
  • @user3742439 如果这个答案解决了你的问题,请考虑accepting它,只需单击其左侧的复选标记;)
  • @user3742439 问题在于,当您调用word.charAt(i) 时,它会返回char,但地图使用String 作为键。两种类型必须一致,解决此问题的最简单方法是同时使用 char 作为键。
【解决方案2】:

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

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();
}

【讨论】:

  • 感谢您的帮助,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-04-28
  • 2014-10-23
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多