Извлечение значений из файла - PullRequest
1 голос
/ 03 февраля 2012

У меня есть около 10 строк данных в текстовом файле ниже, содержащем следующее

X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001
X-Value = -0.755030, Y-Value = 7.861651, Z-Value = 6.016289, Timestamp(milliseconds) = 23208

Код, который у меня сейчас есть, использует BufferedReader, читающий каждую строку файла, но я действительно хочу извлечь X-Value , Y-Value , Z-Value и Отметка времени (миллисекунды) значения из каждой строки. Может ли это быть сделано с использованием простых методов String, таких как подстрока, или это подойдет для использования регулярных выражений?

Ответы [ 5 ]

4 голосов
/ 03 февраля 2012

Вы можете сначала разделить строки на , с, затем разделить каждую часть на =, а затем при необходимости обрезать начальные / конечные пробелы.

Для этого вы можете использовать String.split() или java.util.StringTokenizer.

2 голосов
/ 03 февраля 2012

Вы можете использовать String.split для разделения вашей строки на , и =

String str = "X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001";
ArrayList<String> final_data = new ArrayList<String>();
String[] data = str.split(",");
for(String S : data)
final_data.add(S.trim().split("=")[1]);

for(String s : final_data)
System.out.println(s.trim());

Выходные данные =

-0,525108

7.746691

5.863008

23001

1 голос
/ 03 февраля 2012

Вы можете использовать сканер, как это, чтобы извлечь ваши значения:

String str = "X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001";
Scanner scanner = new Scanner(str);
if (scanner.findInLine("^X-Value\\s*=\\s*([^,]*),\\s*Y-Value\\s*=\\s*([^,]*),\\s*Z-Value\\s*=\\s*([^,]*),\\s*Timestamp\\(milliseconds\\)\\s+=\\s+([^,]*)\\s*$") != null) {
    MatchResult result = scanner.match();
    System.out.printf("x=[%s]; y=[%s]; z=[%s]; ts=[%s]%n", result.group(1), result.group(2), result.group(3), result.group(4));
}
scanner.close();

ВЫВОД:

x=[-0.525108]; y=[7.746691]; z=[5.863008]; ts=[23001]
0 голосов
/ 03 февраля 2012
    String s = "X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001";
    s = s.replaceAll(" ", "");
    String[] split = s.split("=|,");

    BigDecimal x = new BigDecimal(split[1]);
    BigDecimal y = new BigDecimal(split[3]);
    BigDecimal z = new BigDecimal(split[5]);
    String ts = split[7];
0 голосов
/ 03 февраля 2012

Зачем играть с split (), просто найдите регулярное выражение!

X-Value\s*=\s*([\d.+-]*).*Y-Value([\d.+-]*).*Z-Value\s*=\s*([\d.+-]*).*Timestamp\(milliseconds\)\s*=\s*(\d*)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...