添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我只需要AED文本。

3 个评论
我不知道如何在圆括号内分割。非常感谢你的帮助。
@Muraliganesan 看看一些关于处理字符串的java教程。你所要求的功能是非常基本的,很可能在一些java教程中得到解释。
虽然子字符串的解决方案在这个特定的情况下是有效的,但你真的应该习惯使用正则表达式。
java
android
MuraliGanesan
MuraliGanesan
发布于 2013-01-29
10 个回答
Janus Troelsen
Janus Troelsen
发布于 2020-11-23
已采纳
0 人赞同

编译并打印出 "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));    

该重词的意思是。

  • \\(: character (
  • (: start match group
  • [: one of these characters
  • ^: not the following character
  • ): with the previous ^, this means "every character except )"
  • +: one of more of the stuff from the [] set
  • ): stop match group
  • \\): literal closing paranthesis
  • 但只取括号内的大写字母。
    现在,我的答案永远不会被选中xD,我还是最喜欢它......Invoques更少的类,更干净......。
    @Daren:但是如果字符串很大,而且你有很多小括号,就会很慢。我在这里使用的方法只会在需要的时候才搜索匹配的东西。但SO是相当随机的,你只需要写很多答案,其中一些会被选中。
    Daren
    Daren
    发布于 2020-11-23
    0 人赞同

    我不知道如何在圆括号内分割。非常感谢你的帮助。

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

    我想你要找的是

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

    这将通过小括号进行分割。它被翻译成由()分割。你使用双\\来逃避paranthese,这是正则表达式的保留字符。

    如果你想用.来分割,你就必须用split("\\.")来逃避点。

    这个答案也符合 )AED( )AED) (AED(
    表达式中的 [ ] 是什么?
    xagyg
    xagyg
    发布于 2020-11-23
    0 人赞同

    This works...

    String str = "United Arab Emirates Dirham (AED)";
    String answer = str.substring(str.indexOf("(")+1,str.indexOf(")"));
        
    比已接受的答案中的意大利语代码可读性强多了。
    Yury
    Yury
    发布于 2020-11-23
    0 人赞同

    我知道这个问题在4年前就被问到了,但是对于任何有相同/类似问题的人来说,在这里(就像我一样),有一个比使用regex更简单的方法。

    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-

    这个函数还有两个版本,取决于开头和结尾的定界符是否相同,以及定界符是否在目标字符串中多次出现。

    使用 StringUtils.substringsBetween 来获得所有匹配的数组。
    Ben Weiss
    Ben Weiss
    发布于 2020-11-23
    0 人赞同

    You could try:

    String str = "United Arab Emirates Dirham (AED)";
    int firstBracket = str.indexOf('(');
    String contentOfBrackets = str.substring(firstBracket + 1, str.indexOf(')', firstBracket));
        
    好的。但如果占位符是像'或%这样的东西呢?比如 String str = "United Arab Emirates Dirham %AED%"; 我们如何在没有RegEx的情况下实现同样的效果?
    gkuzmin
    gkuzmin
    发布于 2020-11-23
    0 人赞同

    我可以建议两种方法。

    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;
        
    amrit_neo
    amrit_neo
    发布于 2020-11-23
    0 人赞同

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

     string.indexOf("("); 
    

    来获取索引

    string.substring(from, to)
        
    yegor256
    yegor256
    发布于 2020-11-23
    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));
        
    \( 。- 这是非法的转义序列,应该使用 \\(
    Accio
    Accio
    发布于 2020-11-23
    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的答案更复杂,但也许有像我这样的人,可以发现我的答案很有用。

    Stefanidis
    Stefanidis
    发布于 2020-11-23
    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"), "");