2012-05-02 24 views
0

正の値と負の値の両方を含むファイル(.csv)から値を読み取る必要があります。文字列を整数に変換するときにエラーが発生します。以下は文字列の負の値をdoubleに変換する方法

Scanner sc = new Scanner(getAssets().open("Book1.csv")).useDelimiter(","); 
    int i = 0; 
    while (sc.hasNext()) { 
     String str = sc.next(); 
     data[i] = new GraphViewData(i, Integer.parseInt(str)); 
     i++; 
    } 

私のlogcatです:

05-02 04:05:55.119: E/AndroidRuntime(3003): ' as integer 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at android.os.Looper.loop(Looper.java:123) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-02 04:05:55.119: E/AndroidRuntime(3003):  at dalvik.system.NativeStart.main(Native Method) 
05-02 04:05:55.119: E/AndroidRuntime(3003): Caused by: java.lang.NumberFormatException: unable to parse '893 
+4

あなたにはどんな例外がありますか? – Herry

+1

あなたはstrを出力して、それが有効な番号であることを検証しましたか? –

+0

値を変換する前にstrを表示します..itの印刷された合計値 – Ryada

答えて

2

これを使用することができますあなたのコードで。

私はあなたが見ているエラーがマイナス記号をどうするとは思わない - ASCIIのマイナス記号(http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.Stringを参照)で始まる文字列を渡すために大丈夫です)

をところで - あなたがしようとしています整数または倍精度に変換しますか?あなたの質問のタイトルは二重(Double.parseDoubleも看板を受け入れます)を言います

0

あなたは、あなたが示すように、あなたがInteger.parseIntを使用することができ整数に文字列内の負の値を変換するには...

Math.abs(x) 
+0

私は上記の例外を受け取りました。 – Ryada

+0

実際には-ve値が必要ですグラフ – Ryada

1

Integer.parseIntは負の数でなければなりません。ただし、-3ではなく、- 3のように負の数値を書いている可能性があります。余分なスペースがあれば、解析が失敗します。他の文字列を使わずに実際の数字を解析しようとしていることを確認する必要があります。

数字以外のデータをすべて削除するには、Integer.parseInt(str.replaceAll("[^\\d-]+", ""));のようなものを使用できます。

編集:あなたの例外によると、文字列にが余分にあるように見えて、変換が失敗する可能性があります。文字列を数値に解析して解析するときには、数字だけを持つようにしてください。