2015-07-28 4 views
3

У меня есть следующий файлСинтаксических текстового файл зазубренного массива

3 
2,3,4,5 
6,7,8 
9,10 

и я пытаюсь преобразовать его передать его как зазубренный массив в два раз. Я имею в виду, я пытаюсь сохранить это как

double[][] myArray = {{2,3,4},{6,7},{9}} 
double[] secondArray = {5,8,10} 

Я был в состоянии получить значения, считанные из файла, но я застрял на 2 вещи.

  1. Как преобразовать значения в двойной массив?
  2. Как хранить последние элементы в новом массиве?

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

вот что я до сих пор

public double[] fileParser(String filename) { 

    File textFile = new File(filename); 
    String firstLine = null; 
    String secondLine = null; 
    String[] secondLineTokens = null; 

    FileInputStream fstream = null; 
    try { 
     fstream = new FileInputStream(filename); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
    try { 
     firstLine = br.readLine(); // reads the first line 
     List<String> myList = new ArrayList<String>(); 
     while((secondLine = br.readLine()) != null){ 
      myList.add(secondLine); 
      //secondLineTokens = secondLine.split(","); 

     } 

     String[] linesArray = myList.toArray(new String[myList.size()]); 
     for(int i = 0; i<linesArray.length; i++){ 
      System.out.println("tokens are: " + linesArray[i]); 
     } 

     double[] arrDouble = new double[linesArray.length]; 
     for(int i=0; i<linesArray.length; i++) 
     { 
      arrDouble[i] = Double.parseDouble(linesArray[i]); #error here 
     } 



    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

ответ

3

Похоже, что первая строка дает число строк в остальной части файла. Вы можете использовать его, чтобы сделать массивы заранее, как это:

int n = Integer.parseInt(br.readLine()); 
double a[][] = new double[n][]; 
double b[] = new double[n]; 
for (int i = 0 ; i != n ; i++) { 
    String[] tok = br.readLine().split(","); 
    a[i] = new double[tok.length-1]; 
    for (int j = 0 ; j != a[i].length ; j++) { 
     a[i][j] = Double.parseDouble(tok[j]); 
    } 
    b[i] = Double.parseDouble(tok[tok.length-1]); 
} 

Кроме того, вы можете использовать String.split метод, чтобы узнать, сколько записей должны быть добавлен к зубчатому массиву. Таким образом, код становится намного короче, потому что вы можете предварительно выделить все свои массивы.

Demo.

Смежные вопросы