【问题标题】:Reading file data into two arrays (not array lists)将文件数据读入两个数组(不是数组列表)
【发布时间】:2017-05-01 05:52:49
【问题描述】:

我有一个文件:

A,0.3
B,0.1
C,0.2
 ...

我希望得到的数组具有以下形式:

String[] symbols = {A, B, C, ...}

Double[] frequencies = {0.3, 0.1, 0.2, ...}

我已经使用 ArrayList 解决了这个问题(.add() 很好),但是在一些设计决策之后,我想要常规数组中的数据。显然我下面的实现不起作用,但它是我最接近的:

while (scan.hasNextLine()) {
        count ++;             // Number of lines incremented

        String[] parts;
        parts = r.split(",");

        // Store symbols into its own array
        for(int i = 0; i < count; i ++)
                syms[i] = parts[0];

        // Store frequencies into its own array
        for(int i = 0; i < count; i ++)
                freqs[i] = Double.parseDouble(parts[1]);
        }

Count 跟踪扫描行的数量(条件为 true),起初这对我来说似乎没有必要,但我现在正在尝试。因此得到帮助。谢谢。

【问题讨论】:

  • 如何事先计算出数组的大小?
  • 尝试使用集合,因为当您不知道文件中的行数时,使用数组不是一种编程习惯
  • 数组能做什么,数组列表不能做什么?
  • @ScaryWombat 我想计算读取的行数就可以了。该文件不会更改列出的格式
  • 不,您需要将整个文件读取两次。如果出于某种奇怪的原因您希望数据位于数组中,最初将代码放入 ArrayList 中,然后转换 toArray 仍然会更容易和更清晰

标签: java arrays string delimiter


【解决方案1】:

已解决:我创建了一个 5 的数组,但好的方法是使用 array-list 动态增加减少数组的大小

 public static void main(String[] args) throws IOException {

String[] myArray;
double[] doubleArray = new double[5];
String[] strArray= new String[5];

     int inc1=0;
     int inc2=0;
     FileReader fileReader = new FileReader("test.txt");
     Scanner s= new Scanner(fileReader);

     while(s.hasNext()){
           myArray= s.next().split(",");
       // to store double values
    for (String getStr: myArray) {
        if(isDouble(getStr)==true){
            doubleArray[inc1]= Double.parseDouble(getStr);
            inc1++;
        }
       // to store string values
        else {
            strArray[inc2]=getStr;
            inc2++;
        }
  }
  }

      for(String ss : strArray){
             System.out.println("str value-> : "+ ss);
         }
         for(Double nnn : doubleArray){
             System.out.println("double value-> : " + nnn);
         }

      fileReader.close();

}

检查它的敞篷车是否比它发送 true else false

 public static boolean isDouble( String input ) {
    try {
        Double.parseDouble(input );
        return true;
    }
    catch( Exception e ) {
        return false;
    }
}

测试文件包含:

A,0.3 
B,0.1 
C,0.2
d,0.4 
e,0.5 

输出:

str value-> : A
str value-> : B
str value-> : C
str value-> : d
str value-> : e
double value-> : 0.3
double value-> : 0.1
double value-> : 0.2
double value-> : 0.4
double value-> : 0.5

如果它比投票有用,希望回答这个问题

【讨论】:

  • 感谢您的回答!如果我事先阅读这些行并将其作为数组的大小传递,这会很好。
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 2014-04-08
  • 2018-06-26
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多