java - 如何将带有空格的 double 字字符串更改为我可以使用的仅由 double 字组成的数组

标签 java android

我是编码新手,因此我们将不胜感激。我在 Android 手机上有一个文本文件,其中包含几 block 基本上是数字的字符串 - “553955765.50 272 272 272 200.1 100 7391 22 22 10 53”

我已经成功地从手机中读取了该文件,但每次我尝试将这串数字转换为 double 组时,都会收到一条错误消息

java.lang.NumberFormatException:无效 double :“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) 

最佳答案

假设空格后面的每个数字都是 double ,则必须使用 split() 来分隔字符串数组中的数字。之后,您可以在 split() 生成的数组的每个项目中使用 Double.parseDouble()。

关于java - 如何将带有空格的 double 字字符串更改为我可以使用的仅由 double 字组成的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45358301/

相关文章:

java - 如何在非 Activity 类中使用 Activity 方法?当我尝试使用上下文时我的程序崩溃

java - 如何在 Java 中获取当前目录列表的数组,包括文件/目录名称、上次修改时间和大小?

java - Java(JVM)如何为每个线程分配堆栈

android - smoothScroll 方法在 onCreate() 中不起作用

android - OnSharedPreferenceChangeListener 未调用 #2

android - 如何在 android 中为应用程序创建通用菜单

java - 使用 spring mvc 跟踪多个相关的输入框

java - 使用空布局在 JTextpane 中插入 Jtable

Java:使用流读取文件时出现问题

java - 应用程序运行良好,那么我可以忽略 "CursorWindow: Window is full: requested allocation 12 bytes, free space 4 bytes, window size 2,097,152 bytes"吗?