Краткое изложение того, что я узнал в сегодняшнем потоке живого кодирования по адресу https://twitch.tv/jitterted .
Сопоставление новых строк в регулярном выражении
Для текста, с которым я работаю, я хочу, чтобы поиск и замена регулярных выражений работали по новым строкам (по умолчанию сопоставление останавливается на новой строке). Сегодня я узнал, что мне нужно добавить это: (?s) в строку регулярного выражения, которая включает режим DOTALL , и поэтому подстановочный знак точки будет совпадать в новых строках. Для получения дополнительной информации см. JavaDoc: Для получения дополнительной информации см. JavaDoc:
Пример совпадений() используя ПОЛНОСТЬЮ
Я хочу найти текст, окруженный 3 равными знаками ( === ) как в начале, так и в конце. Текст может занимать несколько строк.
Например:
Before text. === Text inside the equals signs. === Outside text.
Для поиска текста я бы использовал метод String.matches() , например:
boolean found = text.matches();
Который возвращает true , если шаблон найден, как это было бы в примере выше.
Пример замены всех с помощью DOTALL
Если я хочу заменить блок кода с тройной обратной связью тегом (как я делаю в своем прямом эфире), то я бы сделал это:
Что привело бы к этому:
public class Stock {
}
Сканер для синтаксического анализа
Я использовал Сканер в нескольких местах и забыл об этом, пока мне не напомнил один из моих постоянных зрителей потока (спасибо flamaddidle84 !). Сегодня я хотел разобрать некоторый текст и разделить строки всякий раз, когда между двумя непустыми строками была пустая строка.
Например, учитывая этот текст:
Block one. Still part of block one. Yep, still part of block one. Block two here. Still part of block two. Last block here.
Я хочу закончить тремя фрагментами текста. Используя класс Сканер и тот факт, что разделитель может быть указан, это все, что мне было нужно:
Scanner scanner = new Scanner(text).useDelimiter("\n\n");
Затем, все, что мне нужно было сделать, это использовать метод scanner.tokens() (доступен только начиная с Java 9), чтобы предоставить мне поток этих блоков, например:
scanner.tokens()
.map(s -> "" + s + "
\n")
.collect(Collectors.toList());
Который использует Замените/| на каждом блоке, чтобы окружить его HTML-кодом (абзац) тег. Вот полный пример кода:
При запуске это приводит к следующему результату:
Block one. Still part of block one. Yep, still part of block one.
Block two here. Still part of block two.
Last block here.
Если вы хотите посмотреть, как я использую TDD для программирования на Java и Spring, и учиться вместе со мной, настройтесь на мой ежедневный поток в Twitch. ТЕЛЕВИЗОР/Дрожащий . Обычно я транслирую с 12 вечера PDT (1900 UTC) около 3 часов. Вы также можете пообщаться со мной на мой разлад .
Оригинал: “https://dev.to/jitterted/live-coding-learnings-june-18-2019-6nb”