Доброго времени суток, в Java я новичок, поэтому тапками не кидайте, если спрашиваю очевидную вещь. Однако, гугл мне в моём вопросе не смог помочь.
Есть текст вида:
"Белеет парус одинокой
В тумане моря голубом!..
Что ищет он в стране далекой?
Что кинул он в краю родном?..."
И тут у меня возникает два вопрос:
1) Как поместить этот текст в одну переменную.
2) Если это невозможно (размещение многострочного текста в переменной), то как реализовать поиск по регулярке, если, к примеру мне требуется данный отрывок:
голубом!..
Что
Т.е. должно срабатывать регулярное выражение вида:
[а-я]+[!.]+
[а-яА-Я]+
Ответ
Массивы текстовых данных, в т. ч. состоящие из отдельных строк, могут существовать в Java как в виде наборов строковых элементов (массив, ArrayList и т.п.), так и в виде отдельной строки, содержащей символы перенеоса строк ("
" или "
", в зависимости от системы). Если данные читаются из файла, то, как правило, они читаются методом readLine() одного из классов-потомков Reader , по одной строке за раз, и в этом случае со строками можно поступать как с элементами массива.
Если текст хранится в виде набора строк, то все эти строки можно объединить используя StringBuilder (последовательно в цикле добавляя к нему строку за строкой) или методом String.join(). Второй вариант может быть чуть удобнее, но он может оказаться дороже в смысле памяти и быстродействия.
Когда строки объединены тем или иным способом, можно использовать регулярку для поиска в объединенной строке. Пример кода ниже показывает объедининие строк обоими методами и описание единой строки, содержащей символы переноса строк.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Ru_So_756552 {
public static String[][] testData = {
{ "Белеет парус одинокой
" + // array of 1 string
"В тумане моря голубом!..
" +
"Что ищет он в стране далекой?
" +
"Что кинул он в краю родном?..." },
{ "Мой дядя самых честных правил,
" +
"Когда не в шутку занемог,
" +
"Он уважать себя заставил
" +
"И лучше выдумать не мог" },
{ "Белеет парус одинокой", // Array of 4 strings
"В тумане моря голубом!..",
"Что ищет он в стране далекой?",
"Что кинул он в краю родном?..." },
};
public static void main(String[] args) {
Pattern pattern = Pattern.compile("([\\wА-Яа-я]+!\\.{2}\
[\\wА-Яа-я]+)");
for (String[] data: testData) {
System.out.println("*** Data:");
StringBuilder sb = new StringBuilder();
for (String s: data) {
System.out.println(s);
sb.append(s + "
"); // Concatenate using StringBuilder
}
String joint = String.join("
", data); // Concatenate using join()
System.out.println("*** Joint data:
" + joint);
Matcher m = pattern.matcher(sb);
System.out.println("*** Found:
" + (m.find()? m.group(1) : "nothing... :("));
m = pattern.matcher(joint);
System.out.println("*** Found in joint:
" + (m.find()? m.group(1) : "nothing... :(") + "
");
} // for (String[] data: testData) {
} // public static void main(String[] args) {
} // public class Ru_So_756552
Комментариев нет:
Отправить комментарий