可能重复:
两个定界符之间的子字符串
我有一个字符串
"ABC [这是要提取的内容] "
我想在Java中提取"这是要提取的内容"
部分。我尝试使用split,但它并不按照我想要的方式工作。是否有建议?
可能重复:
两个定界符之间的子字符串
我有一个字符串
"ABC [这是要提取的内容] "
我想在Java中提取"这是要提取的内容"
部分。我尝试使用split,但它并不按照我想要的方式工作。是否有建议?
如果你的字符串中只有一对方括号 ([]
),你可以使用 indexOf()
函数:
String str = "ABC[ This is the text to be extracted ]";
String result = str.substring(str.indexOf("[") + 1, str.indexOf("]"));
indexOf
和 substring
内部会遍历字符串中的字符。因此,当您调用 str.substring(str.indexOf, str.indexOf)
时,请记住原始字符串 str
将被遍历 3 次。在处理大型字符串时,这可能导致性能问题。 - Cherry如果只出现一次,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
}
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);
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));