2

我正在解析十进制格式的网格坐标。我想将模式匹配存储在 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

4 回答 4

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

这是创建一个可以包含 StringBuilder 类型实例的空数组。您最可能想要做的是:

StringBuilder coordinate = new StringBuilder();

它创建了一个可以附加到的实际 StringBuilder 对象。

于 2013-04-02T18:16:32.653 回答
3

您正在创建字符串构建器数组,但在使用数组时未实例化它指定长度

解决方案 // StringBuilder[] hemisphere = new StringBuilder[length];

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

然后你不会得到任何空指针异常我希望这会有所帮助

于 2013-06-20T04:42:00.410 回答
0

StringBuilder您正在创建一个未指定长度的数组,即,因此您有一个要填充StringBuilder[] hemisphere = new StringBuilder[]{};的空数组,因此arrayNullPointerException

于 2013-04-02T18:14:30.270 回答
0

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

于 2013-04-02T18:25:15.690 回答