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

の最初の要素splittextは空の文字列であり、これは yourHashMapおよびNullPointerExceptionon にマッピングされていませんget()

の最初の要素をスキップすることで、これを修正できますsplittextString#split()末尾の空白を回避する方法がありますが、先頭の空白は回避できないため、他の方法ではできないと思います。

より良い解決策はString#toCharArray()、空の文字列で分割するよりも優れているものを使用することです:)

于 2013-03-17T04:44:30.257 に答える
1

すべての文字で文字列を分割しているだけなので、文字をマップに格納し、を使用plaintext.toCharArray()して、結果の配列をループし、マップ内の各文字を検索することを検討します。

于 2013-03-17T04:52:57.253 に答える
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);
于 2013-03-17T04:48:46.503 に答える
0

エントリ文字列パターン ("") を使用して文字列を分割しようとすると、文字列が分割されず、分割された文字列 (存在しない) にアクセスしようとして NullPointerException が発生します。スペースで文字列を分割する ("\s") を使用して文字列を分割してみてください。

お役に立てれば。

于 2013-03-17T05:22:19.510 に答える