Как извлечь строку из "("
и ")"
с помощью сопоставления шаблонов или чего-то еще. Например, если текст `
"Привет (Java)"
Тогда как получить только "Java"
.
Спасибо.
Как извлечь строку из "("
и ")"
с помощью сопоставления шаблонов или чего-то еще. Например, если текст `
"Привет (Java)"
Тогда как получить только "Java"
.
Спасибо.
Попробуйте следующее:
String x= "Hello (Java)";
Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x);
while(m.find()) {
System.out.println(m.group(1));
}
или
String str = "Hello (Java)";
String answer = str.substring(str.indexOf("(")+1,str.indexOf(")"));
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("\\((.*?)\\)");
Matcher regexMatcher = regex.matcher("Hello This is (Java) Not (.NET)");
while (regexMatcher.find()) {//Finds Matching Pattern in String
matchList.add(regexMatcher.group(1));//Fetching Group from String
}
for(String str:matchList) {
System.out.println(str);
}
OUTPUT
Java
.NET
Что означает \\((.+?)\\)
?
Этот регулярный шаблон выражения будет начинаться с \\(
, который будет соответствовать (
, поскольку он зарезервирован в regExp, поэтому нам нужно сбежать от этого символа, то же самое для \\)
и (.*?)
будет соответствовать любому символу, равному нулю или больше времени все, кроме того, в ()
рассматривается как группа, которую мы находим.
Я знаю, что это было спрошено 3 года назад, но для тех, у кого есть тот же/похожий вопрос, который приземляется здесь (как и я), есть что-то еще более простое, чем использование регулярного выражения:
String result = StringUtils.substringBetween(str, "(", ")");
В вашем примере result
будет возвращен как "Java". Я бы рекомендовал библиотеку StringUtils для различных видов (относительно простых) манипуляций с строками; он автоматически обрабатывает ненужные входы, что может быть удобно.
Документация для substringBetween(): https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substringBetween-java.lang.String-java.lang.String-java.lang.String-
Существуют две другие версии этой функции, в зависимости от того, являются ли разделители открытия и закрытия одинаковыми и существует ли разграничитель в целевой строке несколько раз.