我正在尝试将字符串转换为数字数组,因此我定义了一个哈希映射来完成这项工作。这是我的代码:
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”&#39;在运行时,但我想哈希映射是可以的,因为我尝试了类似
的东西 numtext[i]=numMap.get("z");
它工作正常。那么我的splittext数组可能存在一些问题吗?
答案 0 :(得分: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, ]
splittext
的第一个元素是空字符串,它在HashMap
中没有映射,因此在NullPointerException
上没有get()
。
您可以跳过splittext
的第一个元素来解决此问题。 String#split()
有一种方法可以避免尾随空格,但不能引导空格,所以我认为你不能以任何其他方式做到这一点。
更好的解决方案就是使用String#toCharArray()
,这比拆分空字符串更好:)
答案 1 :(得分: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(“”);返回null。您可以在地图中添加一个带有key =“”的条目来解决问题
numMap.put("", 32);
答案 2 :(得分:1)
由于你只是在每个字符上分割字符串,我会考虑将字符存储在地图中,使用plaintext.toCharArray()
,然后遍历结果数组,查找地图中的每个字符
答案 3 :(得分:0)
您正在尝试使用条目字符串模式(“”)拆分String,因此String不会被拆分,并且在尝试访问拆分字符串(不存在)时会出现NullPointerException。尝试使用(“\ s”)拆分String,这将在空格上拆分字符串。
希望这有帮助。