0

私はこのような文字列を持っています

106.826820,-6.303850,0

これは、Google マップの KML ドキュメントを解析して得たものです。今、私はその文字列を Double に解析したい これが私のコードです:

public Double getLatitude(){
    for(int posisi = GPS_NAME.indexOf(","); posisi > GPS_NAME.length(); posisi++){
        TEMP_LAT = "" + GPS_NAME.indexOf(posisi);
    }
    GPS_LATITUDE = Double.valueOf(TEMP_LAT);

    return GPS_LATITUDE;
}

public Double getLongitude(){
    int posisiakhir = GPS_NAME.indexOf(",");
    for(int i = 0; i < posisiakhir; i++){
        TEMP_LON = "" + GPS_NAME.indexOf(i);
    }
    GPS_LONGITUDE = Double.valueOf(TEMP_LON);

    return GPS_LONGITUDE;
}

しかし、実行しようとすると、このようなエラーが発生しました ここに画像の説明を入力

誰かが私の問題を解決するのを手伝ってくれませんか >_<

4

4 に答える 4

2

また、null ではないことを確認GPS_LATITUDE = Double.valueOf(TEMP_LAT); TEMP_LATします。例外は NumberFormatException ではなく NullPointerException であるためです。

于 2012-06-04T06:30:56.843 に答える
2

null ポインター例外があるため、次のようにする必要があります。

public Double getLatitude(){
    for(int posisi = GPS_NAME.indexOf(","); posisi > GPS_NAME.length(); posisi++){
        TEMP_LAT = "" + GPS_NAME.indexOf(posisi);
    }
    if (TEMP_LAT != null) {
       GPS_LATITUDE = Double.parseDouble(TEMP_LAT);
    }

    return GPS_LATITUDE;
}

double に変換するには、むしろ使用するDouble.parseDouble()か、使用することもできますnew Double(TEMP_LAT).doubleValue()が、最初のアプローチはよりクリーンです。

于 2012-06-04T06:30:59.173 に答える
1

NPE の考えられる原因に加えて、私はあなたの論理を本当に理解していません。私には完全に危険に見えます。

いくつかの例:

GPS_NAME.indexOf(",")-1または、検索されている文字列の長さよりも小さいインデックスを返します。では、長さよりも大きいかどうかをチェックする条件があるのはなぜでしょうか? posisi > GPS_NAME.length()真になることはないため、for ループは役に立たない...

次に、ループ内で行いますTEMP_LAT = "" + GPS_NAME.indexOf(posisi)。前の発言から、それが文字列の長さよりも小さいか、またはその他の数値であることposisiがわかります。-1そのため、文字列内の整数(かなり小さい数値) でGPS_NAME.indexOf(posisi)表される文字を見つけようとします。posisiそれはどのように理にかなっていますか?

ロジックを再考することをお勧めします - おそらくString.split(",")良い出発点です.

于 2012-06-04T06:44:43.503 に答える
0

使用するDouble.parseDouble(TEMP_LAT);

于 2012-06-04T06:27:28.710 に答える