如何提取两个分隔符之间的字符串

57

可能重复:
两个定界符之间的子字符串

我有一个字符串

"ABC [这是要提取的内容] "

我想在Java中提取"这是要提取的内容"部分。我尝试使用split,但它并不按照我想要的方式工作。是否有建议?


1
尝试使用正则表达式 - vainolo
4
你尝试过什么?如果没有看到你的代码,很难知道你的方法为什么不起作用。请提供代码。 - Jon Skeet
使用StringTokenizer("分隔符","字符串")函数。 - curious
1
String bar = StringUtils.substringBetween("ABC[ This is to extract ]", "[", "]"); 请参阅文档:https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html - Haid
4个回答

104

如果你的字符串中只有一对方括号 ([]),你可以使用 indexOf() 函数:

String str = "ABC[ This is the text to be extracted ]";    
String result = str.substring(str.indexOf("[") + 1, str.indexOf("]"));

3
函数 indexOfsubstring 内部会遍历字符串中的字符。因此,当您调用 str.substring(str.indexOf, str.indexOf) 时,请记住原始字符串 str 将被遍历 3 次。在处理大型字符串时,这可能导致性能问题。 - Cherry
1
indexOf('[') 可能比 indexOf("[") 快一点 - pi3

72

如果只出现一次,ivanovic的答案可能是最好的方式。但如果有多个出现,则应该使用正则表达式:

\[(.*?)\] 这是您的模式。并且在每个 group(1) 中将获得您的字符串。

Pattern p = Pattern.compile("\\[(.*?)\\]");
Matcher m = p.matcher(input);
while(m.find())
{
    m.group(1); //is your string. do what you want
}

这是我正在尝试的代码:Pattern somePart = Pattern.compile("\b[.*?\b]"); Matcher matcher = somePart.matcher(info); - yogsma
1
请参考此线程的答案,以应用上述方法:https://dev59.com/rm445IYBdhLWcg3w3N2z - Mudassir Hasan

9
尝试一下
String s = "ABC[ This is to extract ]";
        Pattern p = Pattern.compile(".*\\[ *(.*) *\\].*");
        Matcher m = p.matcher(s);
        m.find();
        String text = m.group(1);
        System.out.println(text);

8
  String s = "ABC[This is to extract]";

    System.out.println(s);
    int startIndex = s.indexOf('[');
    System.out.println("indexOf([) = " + startIndex);
    int endIndex = s.indexOf(']');
    System.out.println("indexOf(]) = " + endIndex);
    System.out.println(s.substring(startIndex + 1, endIndex));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接