2012-01-08 68 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) {    
      } 
     }