【问题标题】:Nullpointer exception error for using split and comma operators使用拆分和逗号运算符的 Nullpointer 异常错误
【发布时间】:2015-10-14 10:08:48
【问题描述】:

我想将值 HTRANS 和 HBURST 存储在一个列表中,将 2'b00 和 3'b000 存储在另一个列表中。但是我在我编写的代码中遇到了一个空指针异常,我已经为此编写了一个 SSCCE,请帮忙。

import java.util.ArrayList;
import java.util.List;

public class SSCCE1 {
    public static void main(String[] args) {
        List<String> bins = new ArrayList<String>();
        bins.add("HTRANS = 2'b00 to 2'b11");
        bins.add("HTRANS = 2'b00 to 2'b11, HBURST = 3'b000 to 3'b111");
        String[] bins_splitcomma = null;
        String temp;
        for(int i =0; i < bins.size(); i++) {
            temp = bins.get(i);
            if(temp.contains(",")) {                // if element of bins contains comma, case 2.
                bins_splitcomma = temp.split(",");
            }
            else {
                bins_splitcomma[0] = temp;          // if element of bins does not contain a comma, case 1.
            }

        }
    }
}

输出:

Exception in thread "main" java.lang.NullPointerException
    at codecoveragetool.SSCCE1.main(SSCCE1.java:28)
Java Result: 1

我的完整代码:

String temp1;
                String[] bins_splitcomma = null;
                String[] bins_split;
                List<String> bins_name = new ArrayList<String>();
                List<String> bins_bitrange = new ArrayList<String>();
                //List<String> bins_bits = new ArrayList<String>();
                ArrayList<ArrayList<String>> bins_bits = new ArrayList<ArrayList<String>>();
                List<String> bins = dataStr.get("bins");
                System.out.println(bins);
                for(int i =0; i < bins.size(); i++) {
                    temp1 = bins.get(i);
                    if(temp1.contains(",")) {
                        bins_splitcomma = temp1.split(",");
                    }
                    else {
                        bins_splitcomma = new String[]{temp1};
                    }
                    for(int j = 0; j < bins_splitcomma.length; j++) {
                        bins_split = bins_splitcomma[j].split("=");                         // HBURST = 3'b000 to 3'b111
                        if(!(bins_name.contains(bins_split[0].trim()))) {
                            bins_name.add(bins_split[0].trim());                        // HBURST
                            bins_bitrange.add(bins_split[1].trim());                    // 3'b000 to 3'b111
                            ArrayList<String> tempo = returnBits(bins_split[1].trim()); // [3'b000, 3'b001, 3'b010, 3'b011, ... , 3'b111]
                            bins_bits.add(tempo);
                        }
                    }
                }

【问题讨论】:

  • bins_splitcomma[0] = temp;失败是因为 bins_splitcomma 为空。你想用这个数组做什么?
  • 我想将 HTRANS 存储在一个列表中,将“2'b00 to 2'b11”存储在另一个列表中。以及第一个列表中的 HBURST 和第二个列表中的“3'b000 to 3'b111”。
  • 我需要一个解决方案,而不是关于空异常的理论。
  • 您不需要检查逗号。如果没有逗号, split 将返回一个单元素数组——这正是你想要实现的。

标签: java arrays string nullpointerexception split


【解决方案1】:

你的线路

bins_splitcomma[0] = temp;

正在尝试设置您在行中定义的空数组的元素

String[] bins_splitcomma = null;

【讨论】:

    【解决方案2】:

    else路径中你需要创建一个数组,不要试图访问空数组引用的元素0。

    bins_splitcomma = new String[]{temp};
    

    这是我的完整测试程序:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Test {
      public static void main(String[] args) {
        List<String> bins = new ArrayList<String>();
        bins.add("HTRANS = 2'b00 to 2'b11");
        bins.add("HTRANS = 2'b00 to 2'b11, HBURST = 3'b000 to 3'b111");
        String[] bins_splitcomma = null;
        String temp;
        for(int i =0; i < bins.size(); i++) {
            temp = bins.get(i);
            if(temp.contains(",")) {                // if element of bins contains comma, case 2.
                bins_splitcomma = temp.split(",");
            }
            else {
                bins_splitcomma = new String[]{temp};          // if element of bins does not contain a comma, case 1.
            }
        }
      }
    
    }
    

    【讨论】:

    • @MiteshKhadgi 我已经添加了完整的测试程序。它为我运行,没有任何错误。
    • 它仍然给我在问题中编辑的完整代码中的错误。 :(
    • @MiteshKhadgi 如果没有新的 SSCCE,将无能为力。
    【解决方案3】:

    由于您的第一个元素不包含,,因此您的代码将进入else 语句,该语句将尝试将值放在bins_splitcomma 的第0 位。但是你从来没有初始化它。试试这个代码

    ...
    else {
        if (bins_splitcomma == null) {
            bins_splitcomma = new String[5];
        }
        bins_splitcomma[0] = temp;          // if element of bins does not contain a comma, case 1.
    }
    

    【讨论】:

      【解决方案4】:

      在 else 部分,您将分配给 null 数组引用的元素 0。需要分配一个字符串的数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-07
        • 2023-03-05
        • 1970-01-01
        • 2014-08-05
        • 1970-01-01
        相关资源
        最近更新 更多