Hashmap get()空指针异常

时间:2016-09-06 14:25:04

标签: java exception null hashmap char

该项目是编码解码: ABCDEFGHIJKLMNOPQRSTUVWXYZ kngcadsxbvfhjtiumylzqropwe 首先,程序应该要求用户输入如上所述的键字符串。 然后程序将读取文件并将其编码内容输出到控制台。大写字母的映射方式与上面的小写字母相同,但保持大写。例如,使用上面的键,每个'A'变成'K' '编码文本时。数字和其他字符不编码并保持不变。 例如,通过上面的映射,每个'a'在编码文本时变为'k',并且每个 解码时'k'变为'a'。

运行1: 输入编码密钥:maxnrslkbpwfzjidouetchgvyq 输入文件名:sampleInput.txt **************编码内容**************** Grfxizr ti XE 20A! Xizdctrue mur liin mt siffigbjl bjetucxtbije,act jit mt urmnbjl yicu zbjn。 Bs yic mctizmtr m zree,yic lrt mj mctizmtrn zree。

再见!

我收到错误:Exception in thread "main" java.lang.NullPointerException

char outputFile= hmap.get(FileChar);行 C:\ Users ..... \ AppData \ Local \ NetBeans \ Cache \ 8.1 \ executor-snippets \ run.xml:53:Java返回:1

我希望将输入文件分配给哈希映射获取值。

原因是因为我没有关于除了[a,z]之外的其他字符的关键值,如“,!”等等,那么它没有这个键值然后使其成为空的异常吗?

以下是code的一些hashmap

HashMap<Character,Character>hmap = new HashMap<>();
  for(int j =0; j<26; j++){

      if(Character.isUpperCase(originalResult.charAt(j))){     
          hmap.put(originalResult.charAt(j),Character.toUpperCase(inputResult.charAt(j)));
      }
      else{
      hmap.put(originalResult.charAt(j),inputResult.charAt(j));
      }
  }

以下是我认为问题的一些代码:

while((Fileline =bin.readLine())!=null )
{
    char[] FileArray = Fileline.toCharArray();

    for(int j=0;j<Fileline.length();j++ )
    {
        FileChar =FileArray[j];  
        char outputFile= hmap.get(FileChar);   ////here is the problem   
    }

    System.out.println( String.valueOf(outputFile));
}

我认为问题可能是我打印时的字符:

while((Fileline = bin.readLine())!= null){

    char[] FileArray = Fileline.toCharArray();

   for(int j=0;j<Fileline.length();j++ ){
          FileChar =FileArray[j]; 
          s = new String(String.valueOf(FileChar));

  }
   System.out.println(s);

结果一无所获:

ý

但是当我在循环中打印时,它看起来每行只有一个字母,而且有很多行:

while((Fileline = bin.readLine())!= null){

    char[] FileArray = Fileline.toCharArray();

   for(int j=0;j<Fileline.length();j++ ){
          FileChar =FileArray[j]; 
          s = new String(String.valueOf(FileChar));
         System.out.println(s);
  }

1 个答案:

答案 0 :(得分:0)

没有输出(只有文件的最后一个字符)的原因是因为每次调用时都要重新实例化一个新字符串:

s = new String(String.valueOf(FileChar));

试试这个:

    char[] FileArray = Fileline.toCharArray();
    s = "";
       for(int j=0;j<Fileline.length();j++ ){
              FileChar =FileArray[j]; 
              s = s + String.ValueOf(FileChar);   
      }
  System.out.println(s);
同样的事情,但更清洁:

      char[] FileArray = Fileline.toCharArray();
    s = "";
       for(int j=0;j<Fileline.length();j++ ){
              s += String.ValueOf(FileArray[j]); 
      }
  System.out.println(s);

最后:

    while((Fileline =bin.readLine())!=null ){

        char[] FileArray = Fileline.toCharArray();
        s = "";
        for(int j=0;j<Fileline.length();j++ ){
              s += String.ValueOf(FileArray[j]);
        }
        System.out.println(s);
}

您获得空指针异常,因为hmap没有为您要“获取”的每个字符都有值。如果你没有为密钥'a'设置一个值,你就不能指望得到密钥'a'的值;例如,如果我这样做:

hmap.put('a', 'd');

hmapt.get('z');

将重新引用空指针异常,因为键'z'的值不存在,仅适用于'a',即'd'。

如果你根本没有编译,那是因为你没有在你运行'.get(FileChar)'的范围内初始化一些变量'hmap'或'FileChar'。