2012-01-08 70 views
1

是否有人知道如何正确地从文件中读取,看起来像这样输入:从文件中读取Java中

0.12,4.56 2,5 0,0.234

我想OT读入2个阵列像这样:

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

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

在java中 我尝试使用扫描仪和它的作品来回iput像0 4 5 3.45 6.7898等,但我想它在用逗号 顶部的输入谢谢

这是我试过的代码:

import java.io.File; 

进口java.io.FileNotFoundException; import 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"); 
     } 

    } 
} 
+2

您能否包含您尝试过的代码? – 2012-01-08 15:31:14

+0

看看这里http://docs.oracle.com/javase/tutorial/essential/io/file.html – RanRag 2012-01-08 15:32:33

+0

我想你只需要添加**。useDelimiter(Pattern.compile(“[,]”)) **在您构建之后**到您的**扫描仪**。请参阅下面的更详细的答案。 – 2012-01-08 15:44:00

回答

5

我认为这会做你想要什么:

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] 

你会明显地要使用文件作为资源。你可以使用a.toArray(),如果你想把它变成一个double []。

+0

+1使用扫描器分隔符 – 2012-01-08 15:42:38

+0

现在原来的代码已被添加,我认为这就是所有需要的。 – 2012-01-08 15:44:36

0

从Java中的文件读取很简单:

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

搞清楚什么用的值做,一旦你在内存中有他们的是,你需要搞清楚的东西。

您可以一次读取一行,并使用java.lang.Stringsplit()函数将其变为单独的值。只要给它",|\\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); 
     } 
    } 
} 
+0

我知道这可能看起来很愚蠢,但我不知道如何使用逗号分隔符。 – 2012-01-08 15:36:00

+0

btw我正在做逆快速傅里叶变换。算法完成..我需要的是从文件输入.. – 2012-01-08 15:36:36

+0

我运行并测试了上面的代码 - 它会通过逗号或空格破坏令牌。尝试一下。 FFT与你的问题无关 - 你想读一个文件。在获取这些值后,对值的处理不会影响读取和标记。 – duffymo 2012-01-08 15:43:04

0

您必须阅读完整的线。

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]

现在,只需重新组织两者之间的内容命令数组。

+0

如果您传递一个匹配空格或逗号的编译正则表达式,扫描器将会工作。 – 2012-01-08 15:38:31

+0

是的..已经修复。谢谢 – 2012-01-08 15:41:32

1

编辑糟糕,这不是你想要的。我没有看到构建所需阵列的逻辑。


  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]); 
        } 
    } 
    
0
 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) {    
      } 
     }