Читать из файла на Java - PullRequest
       16

Читать из файла на Java

1 голос
/ 08 января 2012

Кто-нибудь знает, как правильно прочитать из файла входные данные, которые выглядят так:

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

в Яве Я попытался использовать сканер, и он работает для iput, как 0 4 5 3.45 6.7898 и т. Д., Но я хочу его для ввода сверху с запятыми Спасибо

это код, который я пробовал:

import java.io.File;

import 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");
        }

    }
}

Ответы [ 5 ]

5 голосов
/ 08 января 2012

Я думаю, что это будет делать то, что вы хотите:

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 (), если хотите получить двойное число [].

1 голос
/ 08 января 2012

РЕДАКТИРОВАТЬ Ой, это не то, что вы хотите.Я не вижу логики в создании нужных вам массивов.


  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 голосов
/ 08 января 2012
        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) {            
            }
        }
0 голосов
/ 08 января 2012

Вам придется прочитать всю строку.

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 голосов
/ 08 января 2012

Чтение из файла на 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);
        }
    }
}
...