Как я могу получить значение в круглых скобках в строке.
String str= "United Arab Emirates Dirham (AED)";
Мне нужен только текст AED. Благодаря
Как я могу получить значение в круглых скобках в строке.
String str= "United Arab Emirates Dirham (AED)";
Мне нужен только текст AED. Благодаря
Скомпилирует и печатает "AED". Даже работает для нескольких круглых скобок:
import java.util.regex.*;
public class Main
{
public static void main (String[] args)
{
String example = "United Arab Emirates Dirham (AED)";
Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(example);
while(m.find()) {
System.out.println(m.group(1));
}
}
}
Регулярное выражение означает:
\\(
: символ (
(
: начать группу соответствия[
: один из этих символов^
: не следующий символ)
: с предыдущим ^
это означает "каждый символ, кроме )
" +
: один из элементов набора []
)
: остановить группу соответствия\\)
: буквальная закрывающая паранезияЯ не могу понять, как разделить в круглых скобках. Вы бы высоко оценили
Когда вы разделяете, вы используете reg-ex, поэтому некоторые символы запрещены.
Я думаю, что вы ищете
str = str.split("[\\(\\)]")[1];
Это разделилось бы на скобки. Он преобразуется в разбиение на (
или )
. вы используете двойной \\
, чтобы избежать paranthese, который является зарезервированным символом для регулярных выражений.
Если вы хотите разделить на .
, вам нужно будет использовать split("\\.")
, чтобы избежать точки.
Это работает...
String str = "United Arab Emirates Dirham (AED)";
String answer = str.substring(str.indexOf("(")+1,str.indexOf(")"));
Вы можете попробовать:
String str = "United Arab Emirates Dirham (AED)";
int firstBracket = str.indexOf('(');
String contentOfBrackets = str.substring(firstBracket + 1, str.indexOf(')', firstBracket));
Я знаю, что это было задано более 4 лет назад, но для тех, у кого есть тот же/похожий вопрос, который приземляется здесь (как и я), есть что-то еще более простое, чем использование регулярного выражения:
String result = StringUtils.substringBetween(str, "(", ")");
В вашем примере result
будет возвращен как "AED". Я бы рекомендовал библиотеку 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-
Существуют две другие версии этой функции, в зависимости от того, являются ли разделители открытия и закрытия одинаковыми и существует ли разграничитель в целевой строке несколько раз.
Я могу предложить два способа:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args){
System.out.println(getParenthesesContent1("United Arab Emirates Dirham (AED)"));
System.out.println(getParenthesesContent2("United Arab Emirates Dirham (AED)"));
}
public static String getParenthesesContent1(String str){
return str.substring(str.indexOf('(')+1,str.indexOf(')'));
}
public static String getParenthesesContent2(String str){
final Pattern pattern = Pattern.compile("^.*\\((.*)\\).*$");
final Matcher matcher = pattern.matcher(str);
if (matcher.matches()){
return matcher.group(1);
} else {
return null;
}
}
}
да, вы можете попробовать разные методы, например, используя
string.indexOf("(");
чтобы получить индекс и использование
string.substring(from, to)
Использование регулярного выражения:
String text = "United Arab Emirates Dirham (AED)";
Pattern pattern = Pattern.compile(".* \\(([A-Z]+)\\)");
Matcher matcher = pattern.matcher(text);
if (matcher.matches()) {
System.out.println("found: " + matcher.group(1));
}
Ответ от @Cœur, вероятно, правильный, но, к сожалению, он не сработал для меня. У меня был текст, похожий на это:
mrewrwegsg {text in between braces} njanfjaenfjie a {text in between braces}
Это было намного больше, но давайте рассмотрим только эту короткую часть.
Я использовал этот код, чтобы получить каждый текст между браслетом и распечатать его на консоли:
Pattern p = Pattern.compile("\\{.*?\\}");
Matcher m = p.matcher(test);
while(m.find()) {
System.out.println(m.group().subSequence(1, m.group().length()-1));
}
Это может быть сложнее, чем ответ @Cœur, но, может быть, есть кто-то вроде меня, который может найти мой ответ полезным.