Получить строки используя регулярные выражения из txt JAVA
Eсть txt фаил (в котором хранятся версии установленных обновлений ПО) мне нужно как то получить самую последнюю версию
вот пример ---->
30.11.2020 Обновление 2.218.2.218
27.11.2020 Обновление 2.217.2.217
20.11.2020 Обновление 2.216.2.216
насколько я понял регулярка должна выглядеть вот так (\d{1}\.\d{3}\.\d{1}\.\d{3})
а вот как пройтись по всему документу непонятно
List<String> lines = Files.readAllLines(Paths.get("\"D:\\d\\Readme.txt\""));
Pattern pattern = Pattern.compile("\\d{1}\\.\\d{3}\\.\\d{1}\\.\\d{3}");
for (String read : lines) {
}
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Я вот так решил
data.txt
30.11.2020 Обновление 2.218.2.218 27.11.2020 Обновление 2.217.2.217 20.11.2020 Обновление 2.216.2.216
public static void main(String[] args) throws Exception {
File file = new File("C:/data.txt");
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
String fullText = "";
while ((line = br.readLine()) != null) {
fullText += line;
}
final String sourceText = fullText;
Matcher matcher = Pattern.compile("(\\d{1}\\.\\d{3}\\.\\d{1}\\.\\d{3})").matcher(sourceText);
List<String> matchedResults =
matcher
.results()
.map(result -> sourceText.substring(result.start(), result.end()))
.collect(Collectors.toList());
System.out.println(matchedResults);
}
}
выхлоп такой
[2.218.2.218, 2.217.2.217, 2.216.2.216]
ну или под ваш вариант
public static void main(String[] args) throws Exception {
List<String> lines = Files.readAllLines(Paths.get("C:\\data.txt"));
final String sourceText = lines.stream().collect(Collectors.joining());
Matcher matcher = Pattern.compile("(\\d{1}\\.\\d{3}\\.\\d{1}\\.\\d{3})").matcher(sourceText);
List<String> matchedResults =
matcher
.results()
.map(result -> sourceText.substring(result.start(), result.end()))
.collect(Collectors.toList());
System.out.println(matchedResults);
}