Java 使用HashMap时出错

Java 使用HashMap时出错,java,hashmap,Java,Hashmap,我试图将字符串转换为数字数组,所以我定义了一个哈希映射来完成这项工作。这是我的密码: import java.util.*; public class DES { static HashMap<String, Integer> numMap = new HashMap<String, Integer>(); private static void init(){ numMap.put("a", 0); numMap.put("b", 1);

我试图将字符串转换为数字数组,所以我定义了一个哈希映射来完成这项工作。这是我的密码:

import java.util.*;

public class DES {

static HashMap<String, Integer> numMap = new HashMap<String, Integer>();

private static void init(){
    numMap.put("a", 0);
    numMap.put("b", 1);
    numMap.put("c", 2);
    numMap.put("d", 3);
    numMap.put("e", 4);
    numMap.put("f", 5);
    numMap.put("g", 6);
    numMap.put("h", 7);
    numMap.put("i", 8);
    numMap.put("j", 9);
    numMap.put("k", 10);
    numMap.put("l", 11);
    numMap.put("m", 12);
    numMap.put("n", 13);
    numMap.put("o", 14);
    numMap.put("p", 15);
    numMap.put("q", 16);
    numMap.put("r", 17);
    numMap.put("s", 18);
    numMap.put("t", 29);
    numMap.put("u", 20);
    numMap.put("v", 21);
    numMap.put("w", 22);
    numMap.put("x", 23);
    numMap.put("y", 24);
    numMap.put("z", 25);
    numMap.put(" ", 26);
    numMap.put(".", 27);
    numMap.put(",", 28);
    numMap.put("?", 29);
    numMap.put("(", 30);
    numMap.put(")", 31);

}

public static void main(String[] args) {

    init();

    String plaintext = "how do you like computer science";
    String[] splittext=plaintext.split("");
    int[] numtext=new int[splittext.length];
    for(int i=0;i<splittext.length;i++)
    {
        numtext[i]=numMap.get(splittext[i]);
        System.out.println(numtext[i]);
    }
}


}
而且效果很好。因此,我的splittext数组可能存在一些问题。

数组。toString(splittext)

splittext
的第一个元素是空字符串,它在
HashMap
中没有映射,因此
get()
上的
NullPointerException

您可以通过跳过
splittext
的第一个元素来解决此问题
String#split()
有一种方法可以避免尾随空格,而不是前导空格,所以我不认为你可以用其他任何方法

更好的解决方案是只使用
String#toCharArray()
,这比在空字符串上拆分要好:)

数组。toString(splittext)

splittext
的第一个元素是空字符串,它在
HashMap
中没有映射,因此
get()
上的
NullPointerException

您可以通过跳过
splittext
的第一个元素来解决此问题
String#split()
有一种方法可以避免尾随空格,而不是前导空格,所以我不认为你可以用其他任何方法


更好的解决方案是只使用
String#tocharray()
,这比在空字符串上拆分要好:)

String[]splittext=plaintext.split(“”)创建带有空字符串的数组

[, h, o, w,  , d, o,  , y, o, u,  , l, i, k, e,  , c, o, m, p, u, t, e, r,  , s, c, i, e, n, c, e] 
和numMap.get(“”);返回null。您可以在地图中添加一个key为“”的条目来解决此问题

    numMap.put("", 32);

String[]splittext=plaintext.split(“”)创建带有空字符串的数组

[, h, o, w,  , d, o,  , y, o, u,  , l, i, k, e,  , c, o, m, p, u, t, e, r,  , s, c, i, e, n, c, e] 
和numMap.get(“”);返回null。您可以在地图中添加一个key为“”的条目来解决此问题

    numMap.put("", 32);

因为你只是在每个字符上分割字符串,我只考虑把字符存储在地图中,使用<代码>明文.ToCARARRAY()/Cux>,然后循环遍历结果数组,查找你的地图

中的每个字符,因为你只是在每个字符上分割字符串,我只考虑把字符存储在地图中,使用
plaintext.tocharray()
,然后在结果数组中循环,查找映射中的每个字符

您尝试使用输入字符串模式(“”)拆分字符串,结果字符串未被拆分,并且在尝试访问拆分字符串(不存在)时获得NullPointerException。尝试使用(“\s”)拆分字符串,这将在空格上拆分字符串


希望这有帮助。

您尝试使用输入字符串模式(“”)拆分字符串,结果字符串没有被拆分,并且在尝试访问拆分字符串(不存在)时,您会得到NullPointerException。尝试使用(“\s”)拆分字符串,这将在空格上拆分字符串


希望这能有所帮助。

也许你应该指出
NullPointerException
发生的确切位置。我猜你不能在空字符串上拆分…我猜在空字符串上拆分会将“纯文本”字符串逐字母拆分,它就是这样做的。我对数组“splittext”进行了一次迭代,是的,每个元素都是一个字母。当然,异常发生在“numtext[i]=numMap.get(splittext[i]);”上,也许您应该指出
NullPointerException
发生的确切位置。我猜你不能在空字符串上拆分…我猜在空字符串上拆分会将“纯文本”字符串逐字母拆分,它就是这样做的。我对数组“splittext”进行了一次迭代,是的,每个元素都是一个字母。当然,异常发生在“numtext[i]=numMap.get(splittext[i]);”上!跳过第一个元素可以修复它。非常感谢。确切地跳过第一个元素可以修复它。非常感谢。是的,第一个元素是一个空字符串,这导致了问题。你确定你没有从我的答案中复制吗?:)是的,第一个元素是一个空字符串,这导致了问题。你确定你没有从我的答案中复制吗?:)