如何在字符串中输入括号内的值

时间:2013-01-29 13:25:41

标签: java android

如何在字符串中输入括号内的值。

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

我只需要AED文字。感谢

10 个答案:

答案 0 :(得分:85)

编译并打印“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));    
     }
  }
}

正则表达式意味着:

  • \\(:字符(
  • (:开始匹配组
  • [:其中一个字符
  • ^:不是以下字符
  • ):对于之前的^,这意味着“除)以外的所有字符”
  • +:来自[]
  • 的其中一项内容
  • ):停止匹配组
  • \\):字面关闭paranthesis

答案 1 :(得分:23)

  

我无法理解如何在括号内分割。你会高度赞赏吗

当你分裂时你使用的是reg-ex,因此禁止使用某些字符。

我认为你在寻找的是

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

这将通过括号分开。它转换为()分割。你使用double \\来转义paranthese,这是正则表达式的保留字符。

如果您希望按.拆分,则必须使用split("\\.")来逃避点。

答案 2 :(得分:11)

这有效......

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

答案 3 :(得分:3)

你可以尝试:

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

答案 4 :(得分:3)

我知道这是4年前被问过的,但对于那些有相同/类似问题的人(就像我一样),有一些东西比使用正则表达式更简单:

String result = StringUtils.substringBetween(str, "(", ")");

在您的示例中,result将作为“AED”返回。我建议StringUtils库用于各种(相对简单的)字符串操作;它会自动处理null输入之类的东西,这很方便。

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-

此函数还有另外两个版本,具体取决于开始和结束分隔符是否相同,以及分隔符是否多次出现在目标字符串中。

答案 5 :(得分:2)

我可以建议两种方式:

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

答案 6 :(得分:0)

是的,你可以尝试不同的技巧,比如使用

 string.indexOf("("); 

获取索引 和使用

string.substring(from, to)

答案 7 :(得分:0)

使用正则表达式:

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

答案 8 :(得分:0)

@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的答案复杂,但也许像我这样的人可以找到我的答案有用。

答案 9 :(得分:0)

以下方法可以在任何括号内分割任何字符串,例如'(。{。[,},},]'。

public String getStringInsideChars(String original, char c){
    this.original=original;
    original = cleaning(original);
    for(int i = 0; i < original.length(); i++){
        if(original.charAt(i) == c){
            String temp = original.substring(i + 1, original.length());
            i = original.length();//end for
            for(int k = temp.length() - 1; k >= 0; k--){
                if(temp.charAt(k) == getReverseBracket(c)){
                    original = temp.substring(0, k);
                    k = -1; // end for
                }
            }
        }
    }
    return original;
}

private char getReverseBracket(char c){
    return c == '(' ? ')' :
           c == '{' ? '}' :
           c == '[' ? ']' :
           c == ')' ? '(' :
           c == '}' ? '{' :
           c == ']' ? '[' : c;
}

public String cleaning(String original) {
    this.original = original;
    return original.replaceAll(String.valueOf('\t'), "").replaceAll(System.getProperty("line.separator"), "");
}

您可以像下面这样使用它:

getStringInsideChars("{here is your string}", '{')

它将返回“这是您的字符串”