在方括号中获取字符串

时间:2014-04-29 11:02:41

标签: java regex

我有一个字符串:head1 [00100 - 00228]

我需要检索有方括号的值,即00100 - 00228

我用过:

String a="head1  [00100 - 00228]";    
replaceAll("(\\[.*?\\])", ""))

但这已删除了方括号字符串。任何人都可以帮助我获得欲望输出吗?

5 个答案:

答案 0 :(得分:5)

尝试以下代码

String a  = "head1 [00100 - 00228]";
String out = a.substring(a.indexOf("[")+1,a.indexOf("]"));

希望这有帮助

答案 1 :(得分:1)

你可以:

  • 转出方括号
  • 使用任何字符为您的文字和量词
  • 使用lookarounds。

例如:

String input = "head1 [00100 - 00228]";
//                           | follows by "["
//                           |       | any text, reluctant quantifier
//                           |       |  | followed by "]"
Pattern p = Pattern.compile("(?<=\\[).+?(?=\\])");
Matcher m = p.matcher(input);
// iterating over all matches, in case input String contains more 
// than one [...] entity
while (m.find()) {
    System.out.println("Found: " + m.group());
}

<强>输出

Found: 00100 - 00228

答案 2 :(得分:1)

如果您知道括号前字符串的长度,我首先想到的是使用子字符串。但后来我想到了Tokenizer。它将字符串分解为标记,您可以检查每个字符串以查看它是否以括号开头。

以下是API http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html

的链接

答案 3 :(得分:1)

请检查这是否是您想要的

  public static void main(String[] args) {
      String s = "head1  [00100 - 00228]";
      Pattern p = Pattern.compile(".*(\\[.*?\\]).*");
      Matcher m = p.matcher(s);
      if(m.matches()){
          System.out.println(m.group(1));
      }
}

答案 4 :(得分:1)

您应该查看使用匹配器 - 您可以找到匹配的字符串的多个部分:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.log4j.Logger;

public class MatchingExample {

  private static final Logger logger = Logger.getLogger(MatchingExample.class);

  public static void main(String[] args) {
    // Pattern is: look for square bracket, start capture, look for at least one non-],
    // end capture, look for closing square bracket.
    Pattern p = Pattern.compile("\\[([^\\]]+)\\]");
    Matcher m = p.matcher("This is a [string] of [interest]");
    while (m.find()) {
      logger.info("We found: " + m.group(1));
    }
  }

}

这将打印:

We found: string
We found: interest