2017-07-27 3 views
0

私はコーディングに新しいので、助けてくれれば幸いです。私は基本的に数字である文字列のいくつかのブロックを保持するテキストファイルを持っています - "553955765.52 272 272 272 200.1 100 7391 22 22 10 53"ダブルスペースの文字列を空白で2倍の配列に変更するにはどうすればいいですか

私は電話からファイルを読むことができました時間私はdoubleの配列の中に数字のこの文字列を変換しようと、私は

java.lang.NumberFormatExceptionを言ってエラーを取得:無効なダブル: "553955765.50 272 272 272 200.1 100 7391 22 22 10 53"

ここに私のコードブロックがあります。どんな助けにも大いに感謝しています。私はコーディングに新しいので、ソリューションを説明できれば、私は永遠に感謝しています!

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    File sdcard = Environment.getExternalStorageDirectory(); 
    ArrayList aList = new ArrayList(); 

    //Get the text file 
    File file = new File(sdcard, "test.txt"); 

    //Read text from file 
    StringBuilder text = new StringBuilder(); 

    try { 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 

     while ((line = br.readLine()) != null) { 

      String[] tokens = line.split(" "); 
      double[] ary = new double[tokens.length]; 
      for (int n = 0; n < tokens.length; n++){ 

       ary[n] = Double.parseDouble(tokens[n]); 
      } 
     } 
     br.close(); 
    } catch (IOException e) { 

    } 

    //Find the view by its id 
    TextView tv = (TextView) findViewById(R.id.text_view); 

//Set the text 
    tv.setText(text.toString()); 
    } 
} 

はここで完全なエラーです:

FATAL EXCEPTION: main 
Process: usd.read_text, PID: 32434               java.lang.RuntimeException: Unable to start activity ComponentInfo{usd.read_text/usd.read_text.MainActivity}: java.lang.NumberFormatException: Invalid double: "553955765.50 272 272 272 200.1 100 7391 22 22 10 53" 

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2521) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595) 
at android.app.ActivityThread.access$800(ActivityThread.java:178) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) 
at android.os.Handler.dispatchMessage(Handler.java:111) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5631) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 
Caused by: java.lang.NumberFormatException: Invalid double: "553955765.50 272 272 272 200.1 100 7391 22 22 10 53" 
at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
at java.lang.StringToReal.initialParse(StringToReal.java:164) 
at java.lang.StringToReal.parseDouble(StringToReal.java:282) 
at java.lang.Double.parseDouble(Double.java:301) 
at usd.read_text.MainActivity.onCreate(MainActivity.java:43) 
at android.app.Activity.performCreate(Activity.java:6092) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)  
at android.app.ActivityThread.access$800(ActivityThread.java:178)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)  
at android.os.Handler.dispatchMessage(Handler.java:111)  
at android.os.Looper.loop(Looper.java:194)  
at android.app.ActivityThread.main(ActivityThread.java:5631)  
at java.lang.reflect.Method.invoke(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:372)  
+0

あなたはうまくやっているようです。問題がどこにありますか –

+0

このコードを使用して、指定した入力文字列で問題を再現できません。それは実際のエラーですか?そうでない場合は、実際のエラーを全体として投稿してください。あなたがそうしている間、空の文字列を解析せずに、ファイルがタブや何かではなくスペースで実際に数字を区切っていることを確認してください。 – Dewick47

+1

A)IO例外を無視しないでください。 B)メッセージがきれいである "1 2 3"は単一の数字として解析できません。あなたがここに表示しているコードについて何か怪しいです... – GhostCat

答えて

1

スペースの後に、すべての数は、二重であると仮定すると、あなたは文字列の配列で数字を区切るためにsplit()を使用する必要があります。その後、split()によって生成された配列のすべての項目でDouble.parseDouble()を使用します。

関連する問題