我有以下String myString="city(Denver) AND state(Colorado)";
它重复了“(”和“)”......
如何检索州名,即科罗拉多州。我尝试了以下方法:
String state = myString.substring(myString.indexOf("state(")+1,myString.indexOf(")"));
但是它给了indexOutOfBoundException
有没有办法指定我需要第二个“(”在myString中?
我需要结果:String state = "Colorado";
答案 0 :(得分:9)
使用lastIndexOf
。同时增加初始偏移量以允许子字符串state(
中的字符数:
String state = myString.substring(myString.indexOf("state(") + 6, myString.lastIndexOf(")"));
答案 1 :(得分:4)
您可以使用Regex。
Matcher matcher = Pattern.compile("(state)(\(.*?\))").matcher(text);
String state = matcher.group(2);
答案 2 :(得分:2)
你可以把绳子剪下来,然后在沙盒里做。这样,如果有更多的尾随“)”没有什么不好的事情发生
String state = myString.substring(myString.indexOf("state(")+6);
state = state.substring(0,state.indexOf(")"));
答案 3 :(得分: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);
答案 4 :(得分:1)
您的问题是")"
出现"state("
之前的第一次出现,因为它也出现在Denver
之后。
如果您需要最后一个索引,则可以对"("
和")"
使用lastIndexOf()
。如果您恰好需要第二次出现,可以使用version of indexOf()
来指定索引从何处开始搜索,并将该索引设置为第一次出现char后的索引,如下所示:
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);