#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[]. Будьте осторожны с заключительными скобками )), потому что сразу после них есть «,». Но это очистка кода, и это ваша миссия. Я подал вам идею.