簡體   English   中英

Java - 將數組中的String轉換為double

[英]Java - converting String in array to double

我被這個非常愚蠢的東西困住了;

我得到了這樣的文本文件;

你好:: 140.0 ::再見

我用它將它分成一個字符串數組;

LS = line.split("::");

然后我嘗試將包含數字的數組值轉換為double,就像這樣;

Double number = Double.parseDouble(LS[1]);

但是我收到以下錯誤消息;

線程“main”中的異常java.lang.ArrayIndexOutOfBoundsException:1

有誰知道為什么這不起作用?

public class Test
{

    public static void main(String[] args)
    {
        String s = "140.0::156.33::155.89";
        String[] ls;
        ls = s.split("::");
        for(int i=0;i<=2;i++)
        {
            //System.out.println(ls[i]);
        double d = Double.parseDouble(ls[i]);
           System.out.println(d);
        }
    }
}

我認為這是閱讀文件的問題。 你在分裂后嘗試打印線還是LS的內容嗎?

該錯誤與該行代碼無關。 尋找您嘗試訪問數組索引3的地方。 此示例中的LS應僅包含索引0-2。

我認為某些行不包含指定格式的數據。 該文件是否包含空行? 在這種情況下,split只返回單元素數組。 要找到問題,您可以打印發生錯誤的行(數據)。

import java.util.ArrayList;
import java.util.Arrays;

public class StringToDoubles {

    /**
     * @param args
     */
    public static void main(String[] args)
    {

        String CommaSeparated = "22.3 , 24.5, 44.3";

        java.util.List<String> items = Arrays.asList(CommaSeparated.split("\\s*,\\s*"));
        java.util.List<Double> out = new ArrayList<Double>(); 

        for(int i=0; i < items.size();i++)
        {
            double d = Double.parseDouble(items.get(i));
            System.out.println(d);
            out.add(new Double(d));
        }
    }

}

什么類型的LS? 這段代碼適合我:

public class Test
{

    public static void main(String[] args)
    {
        String s = "Hello::140.0::Bye";
        String[] ls;
        ls = s.split("::");
        System.out.println(ls[1]);
        double d = Double.parseDouble(ls[1]);
        System.out.println(d);
    }
}

您應該使用Eclipse等編譯器,它允許您動態調試代碼。 這里的問題是Array LS的大小<= 1。 這可能是由於Halo提到的文本文件讀取不正確或Mnementh提到空行而引起的。 對於任何不包含:: delimiter的行,都會發生這種情況。

您應該執行檢查以確保Array LS包含> X條目,尤其是當您從條目可能不同的文件中讀入時。

double number = 0.0
if( LS.size() > 3 ){
    number = Double.parseDouble(LS[1]);
}
//Using streams provides a neat solution.
// this will give you {1.3, 3.5, 98.342}
String input = "1.3::3.5::98.342";
double[] arr = Arrays.stream(input.split("::")).mapToDouble(Double::parseDouble).toArray(); 

暫無
暫無

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

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