【问题标题】:JAVA: read .txt file and store doubles into arrayJAVA:读取 .txt 文件并将双精度数存储到数组中
【发布时间】:2015-07-23 14:49:12
【问题描述】:

我已经有以下代码,它可以附加双打。

Scanner sc1 = new Scanner(System.in);

try {

    System.out.println("Enter filename:");
    String name = sc1.nextLine();//determines name of file
    File file = new File(name);//creates above file     
    FileReader fileReader = new FileReader(file);//file is read 
    BufferedReader bufferedReader = new BufferedReader(fileReader );//BufferReader reads file, line by line
    StringBuffer stringBuffer = new StringBuffer();//appended to StringBuffer
    String line;//reads each 

    while ((line = bufferedReader.readLine()) != null) 
    {
        stringBuffer.append(line + "\n");           
    }

    fileReader.close();
    System.out.println("Contents of file:");
    System.out.println(stringBuffer.toString());

    } 

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

代码读取每行有一个双精度的文件

例如:

1

2

3

4

5

...

如何将这些双精度值分别存储到一个数组中?

【问题讨论】:

    标签: java arrays file loops


    【解决方案1】:

    如果你想坚持只使用 Array,请将 StringBuffer 转换为 String[],如下所示:

        String [] stringArray = stringBuffer.split("\n");  
    

    然后将字符串数组转换为双精度数组:

        Double [] doubleArray = new Double[stringArray.size];
        for(int i=0 : i < stringArray.size : i++){  
            doubleArray[i] = Doube.parseDouble(stringArray[i]);  
        }
    

    如果一定要使用StringBuffer,可以通过StringTokenizer类分割成数组。
    或者,您可以使用 String 代替 StringBuffer,然后 split() 方法将与 de-limiter 一起使用。

    【讨论】:

    • 谢谢。我想坚持使用数组,并且使用了您的代码。但它告诉我方法 split("\n") 是未定义的。另外,我不能直接将String数组中的元素转换成双数组dataArray[i] = stringArray[i];
    • 我已经更新了我的答案。字符串数组现在应该转换为 Double。对于 split(),您有两个选项,如主帖中突出显示的那样。
    【解决方案2】:

    您可以使用 ArrayList:

    ArrayList<Double> doubles = new ArrayList<Double>();
    while ((line = bufferedReader.readLine()) != null) 
    {
        doubles.add(Double.parseDouble(line));        
    }
    

    【讨论】:

    • 我以前从未使用过 ArrayList。我注意到上面没有声明数组,所以我想知道如何将上面的代码实现到特定的数组中?
    • 将最终结果保存为字符串,使用 String.split() 将其拆分为数组。对不起,答案误解了您要查找的内容。
    • 有了 ArrayList,你根本不需要 StringBuffer。我在我的代码中实例化了数组,你可以完全复制它。如果您需要帮助打印出 ArrayList 的值,只需谷歌“打印出 ArrayList 的值”
    【解决方案3】:

    基本解决方案

        ArrayList<Double> doubles = new ArrayList<>();
        while ((line = bufferedReader.readLine()) != null)
        {
            stringBuffer.append(line + "\n");
            try{
                double value = Double.parseDouble(line );
                doubles.add(value);
            } catch(NullPointerException e){
                //null string
            } catch(NumberFormatException e){
                //no parsable on the current line
            }
        }
    

    【讨论】:

      【解决方案4】:

      我不明白这个问题...只需创建一个数组,在读取文件时存储该行的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-22
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        • 2020-03-07
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        相关资源
        最近更新 更多