Java считывает значения из текстового файла

#java #regex

#java

Вопрос:

Я новичок в Java. У меня есть один текстовый файл с нижеприведенным содержимым.

`трассировка` - 
структура( 
список( 
 "a" = structure(c(0.748701,0.243802,0.227221,0.752231,0.261118,0.263976,1.19737,0.22047,0.222584,0.835411)), 
 "b" = structure(c(1.4019,0.486955,-0.127144,0.642778,0.379787,-0.105249,1.0063,0.613083,-0.165703,0.695775))
 )
)
 

Теперь я хочу, чтобы мне нужно было получить «a» и «b» в виде двух разных списков массивов.

Комментарии:

1. «как два разных»? Вам нужно попытаться более четко объяснить, чего вы хотите. Возможно, тем временем руководство по вводу-выводу Java может быть вам полезно.

2. Пожалуйста, будьте более конкретными. Что такое a и что такое b?

3. Вы хотите сериализовать и десериализовать объекты Java?

4. Если это текстовый файл, вы можете использовать FileReader и использовать разделение («»») со строками, которые соответствуют «a» и «b». Вы имеете в виду что-то подобное?

5. Останется ли структура файла прежней? Если да, то вы можете использовать BufferedInputStream и проанализировать строку для создания массива.

Ответ №1:

Вам нужно прочитать файл построчно. Это делается с помощью BufferedReader вот так :

 try {
    FileInputStream fstream = new FileInputStream("input.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
    String strLine;         
    int lineNumber = 0;
    double [] a = null;
    double [] b = null;
    // Read File Line By Line
    while ((strLine = br.readLine()) != null) {
        lineNumber  ;
        if( lineNumber == 4 ){
            a = getDoubleArray(strLine);
        }else if( lineNumber == 5 ){
            b = getDoubleArray(strLine);
        }               
    }
    // Close the input stream
    in.close();
    //print the contents of a
    for(int i = 0; i < a.length; i  ){
        System.out.println("a[" i "] = " a[i]);
    }           
} catch (Exception e) {// Catch exception if any
    System.err.println("Error: "   e.getMessage());
}
  

Предполагая, что ваши "a" и "b" находятся в четвертой и пятой строках файла, вам нужно вызвать метод при выполнении этих строк, который вернет массив double :

 private static double[] getDoubleArray(String strLine) {
    double[] a;
    String[] split = strLine.split("[,)]"); //split the line at the ',' and ')' characters
    a = new double[split.length-1];
    for(int i = 0; i < a.length; i  ){
        a[i] = Double.parseDouble(split[i 1]); //get the double value of the String
    }
    return a;
}
  

Надеюсь, это поможет. Я бы все же настоятельно рекомендовал прочитать руководства по вводу / выводу Java и String.

Ответ №2:

Вы можете поиграть с разделением. Сначала найдите строку в тексте, которая соответствует «a» (или «b»). Затем сделайте что-то вроде этого:

 Array[] first= line.split("("); //first[2] will contain the values
  

Затем:

 Array[] arrayList = first[2].split(",");
  

У вас будут числа в ArrayList[]. Будьте осторожны с заключительными скобками )), потому что сразу после них есть «,». Но это очистка кода, и это ваша миссия. Я подал вам идею.