簡體   English   中英

Java:將字符串解析為雙精度

[英]Java: Parsing a string to a double

我正在將文件讀取到數組中,並嘗試取出數字並將它們作為自己數組中的double放置。 而且顯然我的中間名必須是“ Error”。 據我所知,代碼是可以的。。。。 這就是它的全部榮耀。

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
import java.lang.Object.*;

public class ReadFromFile {
    public static void main (String[] args){
        File file = new File("vector10.txt");
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        DataInputStream dis = null;
        StringBuffer sb = new StringBuffer();
        String string = new String();

        try{
            fis = new FileInputStream(file);
            bis = new BufferedInputStream(fis);
            dis = new DataInputStream(bis);


            while((string=dis.readLine()) != null){
                sb.append(string+"\n");
            }

            fis.close();
            bis.close();
            dis.close();

            System.out.println(sb);
            String newString = sb.toString();
            System.out.println(newString);
            String[] doubles = newString.split(",");
            for (int i=0; i<doubles.length; i++){
                System.out.println(doubles[i]);
            }

            Double arrDouble[] = new Double[doubles.length];

            int idx = 0;
            for(String s : doubles) {
               arrDouble[idx++] = Double.parseDouble(s); 
            }           

        } catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

它不斷拋出錯誤

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:412)
at java.lang.Long.parseLong(Long.java:461)
at ReadFromFile.main(ReadFromFile.java:51)

編程不一定是我的強項,而看着屏幕我的眼睛開始流血。 任何想法或提示,不勝感激。 干杯

如果您的文件用逗號分隔,則最好使用Scanner

String doubles = "1.25,    1.65, 1.47";

Scanner f = new Scanner(doubles);
f.useLocale(Locale.US); //without this line the program wouldn't work 
                        //on machines with different locales
f.useDelimiter(",\\s*");

while (f.hasNextDouble()) {
   System.out.println(f.nextDouble());
}

也許您可以嘗試使用Scanner類?

Scanner sc = new Scanner(new File("vector10.txt"));
ArrayList<Double> lst = new ArrayList<Double>();
while (sc.hasNextDouble()) {
  lst.add(new Double(sc.nextDouble()));
}

您的代碼似乎並不是實際運行的代碼,但是在您的代碼中,您正在構建一個包含所有數字的大字符串,並用換行符分隔。 但是然后您將其分割(使用String.split),並以逗號分隔,並且該字符串中沒有逗號。 因此Double.parseDouble一次獲取所有數字。

該錯誤表明您正在調用Long.parseLong(),而不是Double.parseDouble(),就像您發布的代碼所說的那樣。 也許您忘記了重新編譯?

那可能是整個問題,但如果不發送該值的System.out.println(string),您將在此之前調用Double.parseDouble(string),這樣您就可以看到失敗的值。

像所有parse*方法一樣, Double.parseDouble()對它們不期望的字符的反應也不好,不幸的是,它包含空格。 字符串中的一些空格會破壞您的一整天。

為了解決這個問題,首先也要在空格上進行split ,因此像newString.split("[,\\\\s]+")這樣的方法可以通過拆分和刪除任何空白和/或空格來很好地工作。逗號。 然后,當您嘗試解析時,為安全起見, trim字符串Double.parseDouble(doubles[i].trim())類似於Double.parseDouble(doubles[i].trim()) 為了提高安全性,請在分析之前檢查修剪后的字符串是否不是空字符串-可能類似於if (doubles[i].trim().length() < 1) continue;

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM