Видя шаблон в ваших данных, где некоторые строки начинаются с ненужной запятой, а некоторые строки имеют несколько запятых в качестве разделителя, а одна строка даже не имеет разделителя запятых и вместо пробела в качестве разделителя, вы должны будете использовать регулярное выражение, котороеобрабатывает все эти поведения.Вы можете использовать это регулярное выражение, которое делает все это для ваших данных и захватывает соответствующим образом.
([\w- ]+?)[ ,]+([\w .']+)[ ,]+([\d.]+)
Вот объяснение вышеприведенного регулярного выражения,
([\w- ]+?)
- Captures ID
данные, которые состоят из символов слова, дефиса и пробела и помещают их в группу 1 [ ,]+
- это действует как разделитель, где он может быть одним или несколькими пробелами или запятыми ([\w .']+)
- этозахватывает address
данные, которые состоят из символов слова, пробела и .
и помещает их в группу2 [ ,]+
- снова разделитель, как описано выше ([\d.]+)
- это захватываетweight
данные, которые состоят из чисел и .
и помещают их в группу3
Демо
Вот модифицированная Javaкод, который вы можете использовать.Я удалил некоторые из ваших объявлений переменных, которые вы можете вернуть по мере необходимости.Этот код печатает всю информацию после захвата, как вы хотели, используя Matcher
объект.
Pattern p = Pattern.compile("([\\w- ]+?)[ ,]+([\\w .']+)[ ,]+([\\d.]+)");
// Reads the file
try (BufferedReader br = new BufferedReader(new FileReader("data1.txt"))) {
String str;
while ((str = br.readLine()) != null) {
Matcher m = p.matcher(str);
if (m.matches()) {
System.out.println(String.format("Id: %s, Address: %s, Weight: %s",
new Object[] { m.group(1), m.group(2), m.group(3) }));
}
}
}
Prints,
Id: 456-BgT-79876, Address: 22 Broadway, Weight: 24
Id: QAZ-456-QWER, Address: 100 East 20th Street, Weight: 50
Id: Q2Z-457-QWER, Address: 200 East 20th Street, Weight: 49
Id: 678-FGH-9845, Address: 45 5th Ave, Weight: 12.2
Id: 678-FGH-9846, Address: 45 5th Ave, Weight: 12.2
Id: 123-A BC-9999, Address: 46 Foo Bar, Weight: 220.0
Id: 347-poy-3465, Address: 101 B'way, Weight: 24
Id: 678-FGH-8465, Address: 45 5th Ave, Weight: 12.2
Дайте мне знать, если это работает для вас, и если у вас естьлюбой запрос дальше.