Java 如何将一个带空格的双精度数字字符串更改为一个可以使用的双精度数组
我是新的编码,所以任何帮助将不胜感激。我在安卓手机上有一个文本文件,里面有几个基本上是数字的字符串块——553955765.50 272272200.1100 7391 22 22 10 53 我已经设法从手机上读取了文件,但每次我试图将这个数字串转换成一个双精度数组时,我都会收到一个错误,即 java.lang.NumberFormatException:无效双精度:553955765.50 272 272 200.1100 7391 22 10 53 这是我的代码块;如果您能提供任何帮助,我将不胜感激——同样,我对编码非常陌生,因此如果您能解释解决方案,我将永远感激Java 如何将一个带空格的双精度数字字符串更改为一个可以使用的双精度数组,java,android,Java,Android,我是新的编码,所以任何帮助将不胜感激。我在安卓手机上有一个文本文件,里面有几个基本上是数字的字符串块——553955765.50 272272200.1100 7391 22 22 10 53 我已经设法从手机上读取了文件,但每次我试图将这个数字串转换成一个双精度数组时,我都会收到一个错误,即 java.lang.NumberFormatException:无效双精度:553955765.50 272 272 200.1100 7391 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());
}
}
假设空格后的每个数字都是双精度的,则必须使用split来分隔字符串数组中的数字。然后,在split生成的数组的每个项中使用Double.parseDouble。看起来您做得很好。其中是问题。我无法使用此代码和给定的输入字符串再现问题。这是实际的错误吗?如果没有,请完整张贴实际错误。执行此操作时,请确保您没有试图解析任何空字符串,并确保文件实际上是用空格分隔数字,而不是用制表符或其他方式。a不要忽略IO异常。B消息很清楚,1 2 3不能被解析为单个数字。您在此处显示的代码有些可疑。。。
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)