Подтвердить что ты не робот

Как я могу получить в круглых скобках значение в строке

Как я могу получить значение в круглых скобках в строке.

String str= "United Arab Emirates Dirham (AED)";

Мне нужен только текст AED. Благодаря

4b9b3361

Ответ 1

Скомпилирует и печатает "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));    
     }
  }
}

Регулярное выражение означает:

  • \\(: символ (
  • (: начать группу соответствия
  • [: один из этих символов
  • ^: не следующий символ
  • ): с предыдущим ^ это означает "каждый символ, кроме )"
  • +: один из элементов набора []
  • ): остановить группу соответствия
  • \\): буквальная закрывающая паранезия

Ответ 2

Я не могу понять, как разделить в круглых скобках. Вы бы высоко оценили

Когда вы разделяете, вы используете reg-ex, поэтому некоторые символы запрещены.

Я думаю, что вы ищете

str = str.split("[\\(\\)]")[1];

Это разделилось бы на скобки. Он преобразуется в разбиение на ( или ). вы используете двойной \\, чтобы избежать paranthese, который является зарезервированным символом для регулярных выражений.

Если вы хотите разделить на ., вам нужно будет использовать split("\\."), чтобы избежать точки.

Ответ 3

Это работает...

String str = "United Arab Emirates Dirham (AED)";
String answer = str.substring(str.indexOf("(")+1,str.indexOf(")"));

Ответ 4

Вы можете попробовать:

String str = "United Arab Emirates Dirham (AED)";
int firstBracket = str.indexOf('(');
String contentOfBrackets = str.substring(firstBracket + 1, str.indexOf(')', firstBracket));

Ответ 5

Я знаю, что это было задано более 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-

Существуют две другие версии этой функции, в зависимости от того, являются ли разделители открытия и закрытия одинаковыми и существует ли разграничитель в целевой строке несколько раз.

Ответ 6

Я могу предложить два способа:

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;
        }
    }
}

Ответ 7

да, вы можете попробовать разные методы, например, используя

 string.indexOf("("); 

чтобы получить индекс и использование

string.substring(from, to)

Ответ 8

Использование регулярного выражения:

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));
}

Ответ 9

Ответ от @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, но, может быть, есть кто-то вроде меня, который может найти мой ответ полезным.