有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将值附加到StringBuilder数组

我正在分析十进制格式的网格坐标。我想将模式匹配存储在StringBuilder数组中,以便进一步操作。但是,在每个while循环中调用append()时,我会得到一个空指针

String coordinateExample = "N14585928W084144340";
this.parseCoordinate(coordinateExample);
...

public void parseCoordinate(String coordinateString) {

    int i = 0;

    //extract NSEW leading characters
    Pattern pL = Pattern.compile("[A-Z]");
    Matcher m = pL.matcher(coordinateString);        
    StringBuilder[] hemisphere = new StringBuilder[]{};

    while (m.find()) {
        hemisphere[i].append(m.group());
        //System.out.println("m.group(): " + m.group());
        i++;
    }        
    // reset i
    i = 0;

    //extract decimal degree digits
    Pattern pN = Pattern.compile("[0-9]++");
    Matcher n = pN.matcher(coordinateString);
    StringBuilder[] coordinate = new StringBuilder[]{};

    while (n.find()) {            
        coordinate[i].append(n.group());
        //System.out.println("q.group(): " + n.group());
        i++;
    }
}

共 (4) 个答案

  1. # 1 楼答案

    您正在创建一个StringBuilder数组,但没有指定长度,即StringBuilder[] hemisphere = new StringBuilder[]{};,因此您有一个空的array试图填充,因此NullPointerException

  2. # 2 楼答案

    StringBuilder[] coordinate = new StringBuilder[]{};
    

    这将创建一个空数组,其中可以包含StringBuilder类型的实例。你最想做的是:

    StringBuilder coordinate = new StringBuilder();
    

    这将创建一个可附加到的实际StringBuilder对象

  3. # 3 楼答案

    我对Java真的很陌生,但是为什么在实例化构建器之后要使用{}括号呢?难道不应该是StringBuilder [] name = new StringBuilder []?或者StringBuilder [][] name = new StringBuilder [][]

  4. # 4 楼答案

    您正在创建字符串生成器数组,但没有实例化它 指定使用数组时的长度

    解决方案 //StringBuilder[]半球=新StringBuilder[长度]

    for(int i=0;i<length;i++){
    hemisphere [i]=new StringBuilder();
    }
    

    这样就不会出现任何空指针异常 我希望这有帮助