获取指定的映射键时抛出NullPointerException

时间:2014-11-28 17:39:45

标签: java android

我试图从字符串中获取指定的键值,但是当代码到达此行时,会不断抛出nullpointerexception:

splitter.httpHost = ((String)splitter.map.get("Host")).replaceAll(":([\\d]+)", "");

以下是完整的代码:

public class InjectDataSplitter {

private String tmpHost;
private String b;
private int httpPort = 0;
private String httpHost;
private HashMap<String, String> map = new HashMap<String, String>();
private String e;
private String f;

public InjectDataSplitter(String str) {
    this.tmpHost = str;
}

public static InjectDataSplitter get_data_splitter(String str) {

    InjectDataSplitter splitter = new InjectDataSplitter(str);

    splitter.b = splitter.tmpHost;

    //Split the supplied string
    String arraystring[] = splitter.tmpHost.split("\r\n", 2);

    for(int x = 0; x < arraystring.length; x++) {
        String arraystring1[] = arraystring[x].split(" ");

        for(int y = 0; y < arraystring1.length; y++) {
            splitter.e = arraystring1[y];
            splitter.f = arraystring1[y];
        }

        String arraystring2[] = arraystring[x].replace("\r\n\r\n", " ").split("\r\n");

        for(int i = 0; i < arraystring2.length; i++) {

            try {

            String arraystring3[] = arraystring2[i].split(":");
            splitter.map.put(arraystring3[1], arraystring3[2]);

            } catch(Exception e) {

            }

            splitter.httpHost = ((String)splitter.map.get("Host")).replaceAll(":([\\d]+)", "");
            Pattern pattern = Pattern.compile(":([\\d]+)");

            if(!splitter.e.equals("CONNECT")) {

                String s1 = splitter.f;
                s1 = splitter.b;

                Matcher matcher = pattern.matcher(s1);

                if(!matcher.find()) {
                    //find each match in turn
                    //find each match in turn
                    int j = Integer.parseInt(matcher.group(1)); //Access a submatch group

                    boolean flag = splitter.e.equals("CONNECT");

                    if(flag){
                        j = 443;
                    }else{
                        j = 80;
                    }
                    splitter.httpPort = j;

                }
            }

        }
    }

    return splitter;
}

有人可以解释我出错的地方吗?

3 个答案:

答案 0 :(得分:0)

当您尝试在null对象上调用方法时,会出现NullPointerException。

如果你说的话就会出现错误,那就意味着((String)splitter.map.get(&#34; Host&#34;))为空。

答案 1 :(得分:0)

你得到一个NullPointerException,因为这部分代码中的某些东西是空的

 splitter.map.get("Host")

调试并找出,究竟是什么null。我想,map不包含字符串Host。您的代码中有一个致命的危险部分,当您尝试加入map

时可以隐藏问题
catch(Exception e) {

}

可能有例外,但一般来说隐藏异常是不好的。写下至少这个:

catch(Exception e) {
    e.printStackTrace();
}

看看是否有例外。

答案 2 :(得分:0)

在上面的类中调用的字符串参数是:

代码:

String str = A.c(socks.getInputStream());
DataSplitter dataSplitter = DataSplitter.get_data_splitter(str);

我进一步调试,发现该地图不包含名为&#34; Host&#34;的任何字符串键值。关于如何使用hashmap获取映射密钥的想法。关于如何重组我的代码,请进一步提出建议吗?