2013-09-23 2 views
0

Привет ребята У меня есть текстовый файл по следующему пути C:/Users/Marc/Загрузки/vector25, который содержит значения, разделенные запятой в следующем форматеСохранение текстового файла чисел в массив в Java

- 6,08, 70,93, -9,35, -86,09, -28,41,27,94,75,15,91,03, -84,21,97,84, -51,53,77,95,88,37,26,14, -23,58, -18,4, -4,62,46,52, -19,47,17,54, 85.33,52.53,27.97,10.73, -5.82,

Как бы я прочитал этот текстовый файл и сохранил эти двойники в массиве?

Я сейчас думаю о попытке буферизованного читателя, но до сих пор ответ ускользает от меня, может ли кто-нибудь указать мне в правильном направлении?

import java.io.BufferedReader; 
    import java.io.FileNotFoundException; 
    import java.io.FileReader; 
    import java.io.IOException; 
    import java.util.ArrayList; 
    import java.util.Scanner; 
    public class subvector { 

public static void main(String[] args){ 

    FileReader file = null; 
    try { 
     file = new FileReader("C:/Users/Marc/Downloads/vector25"); 
    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    ArrayList<Double> list = new ArrayList<Double>(); 
    int i=0; 
    try { 
     Scanner input = new Scanner(file); 
     while(input.hasNext()) 
     { 
      list.add(input.nextDouble()); 
      i++; 
     } 
     input.close(); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    for(double k:list){ 
     System.out.println(k); 

    } 
} 
+0

В чем проблема с кодом? У вас есть проблемы? Ошибка? – talnicolas

ответ

3

Scanner.nextDouble() использует пробел как разделитель по умолчанию. У вашего ввода есть запятые в качестве разделителя. Вы должны использовать input.useDelimiter(",") для установки запятых в качестве разделителя перед вызовом input.hasNext(). Затем он должен работать так, как ожидалось.

3

Вы должны использовать разделители

Scanner input = new Scanner(file); 
input.useDelimeter(","); 
0

Я думаю, что ваш фрагмент кода не будет для указанных данных, т.е. -6.08,70.93, -9.35, -86.09, -84.21, -28.41,27.94,75.15,91.03 , 97.84, -51.53,77.95,88.37,26.14, -23.58, -18.4, -4.62,46.52, -19.47,17.54, 85.33,52.53,27.97,10.73, -5.82,

Но ваша программа будет работать отлично тип данных:

 
19.60 
63.0 
635.00 
896.63 
47.25 

Я изменил ваш профиль грамм и также проверены вашими данными. Он работает как ожидалось.

public static void main(String[] args) { 
    FileReader file = null; 
    try { 
     file = new FileReader("D:\\log4j\\vector25.txt"); 
    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    ArrayList<Double> list = new ArrayList<Double>(); 
    int i=0; 
    Double d= null; 
    try { 
     BufferedReader input = new BufferedReader(file); 
     String s=null; 
     while((s=input.readLine())!=null) { 
      StringTokenizer st = new StringTokenizer(s,","); 
      while(st.hasMoreTokens()) { 
      try { 
       d = Double.parseDouble(st.nextToken()); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      list.add(i, d); 
     } 
    } 
    input.close(); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 
for(double k:list) { 
    System.out.println(k); 
} 
} 

Просьба ознакомиться с ним и сообщить мне, если вы что-то обновите.

Это мой первый POST на stackoverflow.

Thanks, Prasad