Удаление фрагмента в круглых скобках, учитывая, что они могут быть вложенными
Дано задание: "Удалить из текста все фрагменты в круглых скобках (и сами скобки). Учесть, что скобки могут быть вложенными".
У меня есть данное решение:
String str = textArea1.getText();
str = str.replaceAll("\\(.*?\\) ?", "");
Оно прекрасно справляется с удалением текста в скобках, но не работает, когда речь идёт о вложенных. Т.е в примере "Это текстовая строка (пример (вложенная скобка))" на выходе я получаю "Это текстовая строка )".
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте
import java.util.*;
import java.util.regex.*;
class Test
{
public static void main (String[] args) throws java.lang.Exception
{
String str = "Это текстовая строка (пример (вложенная скобка))";
String regex = "\\s*\\([^()]*\\)";
String tmp = "";
do {
tmp = str;
str = str.replaceAll(regex, "");
} while (!str.equals(tmp));
System.out.println(str);
}
}
См. пример работы кода.
Подробности
\s*\([^()]*\)находит ноль и более пробельных символов,(, ноль и более символов, отличных от круглых скобок,)tmpхранит предыдущее значениеstr- пока
strне равноtmp, происходит удаление найденных подстрок и данной строки.