【问题标题】:Read from a file in Java从Java文件中读取
【发布时间】:2012-01-08 15:29:38
【问题描述】:

有人知道如何从文件中正确读取如下所示的输入:

0.12,4.56 2,5 0,0.234

我不想像这样读入 2 个数组:

a[0]=0.12
a[1]=2
a[2]=0;

b[0]=4.56
b[1]=5
b[2]=0.234

在java中 我尝试使用扫描仪,它可以像 0 4 5 3.45 6.7898 等一样工作,但我希望它用于带有逗号的顶部输入 谢谢

这是我尝试过的代码:

import java.io.File;

导入 java.io.FileNotFoundException; 导入 java.util.Scanner;

public class IFFTI {
    public static int size=0;
    public static double[] IFFTInputREAL= new double[100];
    public static double[] IFFTInputIMAG= new double[100];

    static int real=0;
    static int k=0;

    public static void printarrays(){
        for(int k=0;k<size;k++){
        System.out.print(IFFTInputREAL[k]);
        System.out.print(",");
        System.out.print(IFFTInputIMAG[k]);
        System.out.print("\n");
        }
    }

    public static void readIFFT(String fileName){

        try {
            Scanner IFFTI = new Scanner(new File(fileName));        
            while (IFFTI.hasNextDouble()) {
                if(real%2==0){
                    IFFTInputREAL[k] = IFFTI.nextDouble();
                    real++;
                }
                else{
                    IFFTInputIMAG[k] = IFFTI.nextDouble();
                real++;
                k++;}
            }
            try{
            size=k;
            }catch(NegativeArraySizeException e){}
        } catch (FileNotFoundException e) {
            System.out.println("Unable to read file");
        }

    }
}

【问题讨论】:

标签: java file io double comma


【解决方案1】:

我认为这会做你想要的:

String source = "0.12,4.56 2,5 0,0.234";

List<Double> a = new ArrayList<Double>();
List<Double> b = new ArrayList<Double>();

Scanner parser = new Scanner( source ).useDelimiter( Pattern.compile("[ ,]") );
while ( parser.hasNext() ) {
    List use = a.size() <= b.size() ? a : b;
    use.add( parser.nextDouble() );
}

System.out.println("A: "+ a);
System.out.println("B: "+ b);

为我输出这个:

A: [0.12, 2.0, 0.0]
B: [4.56, 5.0, 0.234]

您显然希望使用文件作为源。如果你想把它变成一个 double[],你可以使用 a.toArray()。

【讨论】:

  • 现在原代码已经添加了,我想就这些了。
【解决方案2】:

您必须阅读整行。

String line = "0.12,4.56 2,5 0,0.234"; //line variable will recieve the line read

然后..你用逗号或空格分割行

String[] values = line.split(" |,");

这将产生一个像这样的数组:[0.12, 4.56, 2, 5, 0, 0.234]

现在,只需重新组织两个订单数组之间的内容。

【讨论】:

  • 如果您向扫描仪传递一个匹配空格或逗号的已编译正则表达式模式,扫描仪就会工作。
【解决方案3】:

从 Java 中读取文件很容易:

http://www.exampledepot.com/taxonomy/term/164

一旦将这些值存储在内存中,就需要弄清楚如何处理它们。

您可以一次读取一行,然后使用 java.lang.String split() 函数将其转换为单独的值。只需将 ",|\\s+" 作为分隔符即可:

public class SplitTest {
    public static void main(String[] args) {
        String raw = "0.12,4.56 2,5 0,0.234";
        String [] tokens = raw.split(",|\\s+");
        for (String token : tokens) {
            System.out.println(token);
        }
    }
}

【讨论】:

  • 我知道这可能看起来很愚蠢,但我不知道如何使用逗号分隔符。
  • 顺便说一句,我正在做快速傅立叶逆变换。算法完成了..我需要的只是文件的输入..
  • 我运行并测试了上面的代码——它会用逗号或空格来破坏标记。尝试一下。 FFT 与您的问题无关 - 您想读取文件。获取值后如何处理这些值不会影响读取和标记化。
【解决方案4】:

编辑糟糕,这不是你想要的。我没有看到构造你想要的数组的方式的逻辑。


  1. 从文件中读取内容
  2. 用空格分割字符串。为拆分数组的每个元素创建一个数组。

    String input = "0.12,4.56 2,5 0,0.234";
    String parts[] = input.split(" ");
    double[][] data = new double[parts.length][];
    
  3. 用逗号分隔每个字符串。

  4. 解析为双精度。

    for (int i = 0; i < parts.length; ++i)
    {
         String part = parts[i];
         String doubles[] = part.split(",");
         data[i] = new double[doubles.length];
         for (int j = 0; j < doubles.length; ++j)
         {
             data[i][j] = Double.parseDouble(doubles[j]);
         }
    }
    

【讨论】:

    【解决方案5】:
            File file = new File("numbers.txt");        
            BufferedReader reader = null;
            double[] a = new double[3];
            double[] b = new double[3];
    
            try {
                reader = new BufferedReader(new FileReader(file));
                String text = null;
    
                if ((text = reader.readLine()) != null) {
                    String [] nos = text.split("[ ,]");
                    for(int i=0;i<nos.length/2;i++){
                        a[i]=Double.valueOf(nos[2*i]).doubleValue();
                        b[i]=Double.valueOf(nos[2*i+1]).doubleValue();
                    }
                }
    
                for(int i=0;i<3;i++){
                        System.out.println(a[i]);
                        System.out.println(b[i]);
               }
    
            } catch (FileNotFoundException e) {            
            } catch (IOException e) {            
            } finally {
                try {
                    if (reader != null) {
                        reader.close();
                    }
                } catch (IOException e) {            
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      相关资源
      最近更新 更多