4

我有以下String myString="city(Denver) AND state(Colorado)"; 它重复“(”和“)”......

如何检索州名,即科罗拉多州。我尝试了以下方法:

String state = myString.substring(myString.indexOf("state(")+1,myString.indexOf(")"));

但它给indexOutOfBoundException

有什么方法可以指定我需要 myString 中的第二个“(”?我需要结果:String state = "Colorado";

4

5 回答 5

9

使用lastIndexOf. 还要增加初始偏移量以允许子字符串中的字符数state(

String state = myString.substring(myString.indexOf("state(") + 6, myString.lastIndexOf(")"));
于 2013-05-26T22:36:24.507 回答
5

您可以使用正则表达式。

Matcher matcher = Pattern.compile("(state)(\(.*?\))").matcher(text);
String state = matcher.group(2);
于 2013-05-26T22:46:22.293 回答
2

你可以把绳子剪下来,然后在一个沙盒里做。这样,如果有更多的尾随“)”,就不会发生任何不好的事情

String state = myString.substring(myString.indexOf("state(")+6);
state = state.substring(0,state.indexOf(")"));
于 2013-05-26T22:46:18.297 回答
1

您可以使用其他版本的String#indexOf(String str, int fromIndex)来指定您想从哪个位置开始搜索")"

int start = myString.indexOf("state(")+6;//6 is the length of "state(" - we dont want that part
int end = myString.indexOf(")", start);
String state = myString.substring(start, end);
于 2013-05-26T22:45:53.630 回答
1

你的问题是第一次出现")"是在出现之前"state(",因为它也出现在之后Denver

如果您需要最后一个索引,您可以使用lastIndexOf(),"("")". 如果您恰好需要第二次出现,您可以使用该版本indexOf()让您指定开始搜索的索引,并将该索引设置为第一次出现字符后的索引,如下所示:

 int firstOpenP = myString.indexOf("(");
 int firstClosedP = myString.indexOf(")");
 int secondOpenP = myString.indexOf("(", firstOpenP + 1);
 int secondClosedP = myString.indexOf(")", firstClosedP + 1);
 String state = myString.substring(secondOpenP + 1, secondClosedP);
于 2013-05-26T22:46:57.700 回答