public class ReplaceInFile {
public static void main(String[] args) throws IOException {
String fileName = "file.txt";
String search = "31415";
String replace = "число ПИ";
Charset charset = StandardCharsets.UTF_8;
Path path = Paths.get(fileName);
Files.write(path,
new String(Files.readAllBytes(path), charset).replace(search, replace)
.getBytes(charset));
}
}
В этом классе я ищу фграгмент текста в файле по полному совпадению. Как сделать так что-бы после полного совпадения программа считывала строку до символа ; ?
Пример поиска
Файл:
IP=123123; CONNECT=456456; DADADA dadada;
DATA=321321;
Если я ищу CONNECT= то его значение нужно считать до знака ;.
Решение, используя регулярные выражения. Ищет "значение" между "CONNECT=" и ";" в строке
public static void main(String[] args) throws IOException {
String string = "IP=123123; CONNECT=456456; DADADA dadada;";
String pattern1 = "CONNECT=";
String pattern2 = ";";
Pattern p = Pattern.compile(Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2));
Matcher m = p.matcher(string);
while (m.find()) {
System.out.println(m.group(1));
}
}
Можно сделать так:
String fileName = "file.txt";
String text = "CONNECT";
String delimiter = ";";
Optional<String> result =
Files
.lines(Paths.get(fileName))
.filter(e -> e.contains(text))
.map(e -> {
int start = e.indexOf(text);
int end = e.indexOf(delimiter, start + text.length());
return e.substring(start, end);
})
.findFirst();
result.ifPresent(System.out::println);
Данное решение позволяет не считывать весь файл целиком.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники