0

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

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


}

运行时出现“nullpointerexception”,但我猜哈希映射没问题,因为我尝试了类似的东西

 numtext[i]=numMap.get("z"); 

它工作正常。所以也许我的 splittext 数组有一些问题?

4

4 回答 4

4

Arrays.toString(splittext)

[, 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, ]

的第一个元素是空字符串,它在 your和onsplittext中没有映射。HashMapNullPointerExceptionget()

您可以通过跳过splittext. String#split()有一种方法可以避免尾随空格,但不能避免前导空格,所以我认为你不能以任何其他方式做到这一点。

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

于 2013-03-17T04:44:30.257 回答
1

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(""); 返回空值。您可以在地图中添加一个带有 key="" 的条目来解决问题

    numMap.put("", 32);
于 2013-03-17T04:48:46.503 回答
1

由于您只是在每个字符上拆分字符串,我会考虑将字符存储在地图中,使用plaintext.toCharArray(),然后循环遍历结果数组,查找地图中的每个字符

于 2013-03-17T04:52:57.253 回答
0

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

希望这可以帮助。

于 2013-03-17T05:22:19.510 回答