2

度の 10 進数形式でグリッド座標を解析しています。さらに操作するために、パターン マッチを StringBuilder 配列に保存したいと思います。ただし、各 while ループで append() を呼び出すと、null ポインターが返されます。

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 に答える