Java 如何对具有重复字符的字符串使用substring和indexOf?

Java 如何对具有重复字符的字符串使用substring和indexOf?,java,string,substring,indexof,Java,String,Substring,Indexof,我有以下String myString=“城市(丹佛)和州(科罗拉多)” 它有重复的“(”和“)” 如何检索州名,即科罗拉多州。我尝试了以下方法: String state = myString.substring(myString.indexOf("state(")+1,myString.indexOf(")")); 但它给出了indexootfboundexception 有没有办法指定我需要myString中的第二个“(?)? 我需要结果:String state=“Colorado”使

我有以下
String myString=“城市(丹佛)和州(科罗拉多)”
它有重复的“(”和“)”

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

String state = myString.substring(myString.indexOf("state(")+1,myString.indexOf(")"));
但它给出了
indexootfboundexception

有没有办法指定我需要myString中的第二个“(?)?
我需要结果:
String state=“Colorado”
使用
lastIndexOf
。同时增加初始偏移量以允许子字符串
状态中的字符数(


您可以使用的其他版本指定从哪个位置开始搜索“


你可以把绳子剪断,然后把它做成一块三盒装的。这样,如果有更多的拖尾,就不会有什么不好的事情发生

String state = myString.substring(myString.indexOf("state(")+6);
state = state.substring(0,state.indexOf(")"));
你可以使用正则表达式

Matcher matcher = Pattern.compile("(state)(\(.*?\))").matcher(text);
String state = matcher.group(2);

您的问题是第一次出现
”“
在出现
”状态(“
”)之前,因为它也出现在
丹佛之后

如果您需要最后一个索引,您可以为
“(“
”)
使用。如果您需要第二个索引,您可以使用,它允许您指定开始搜索的索引,并将该索引设置为字符第一次出现后的索引,如下所示:

 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);

谢谢,它能工作!我可以问一下,以防我重复多次这个
(“
”,例如
myString=“abc(defg(h)(i(k)(o)
。有没有办法指定我需要第三个
”(“
)我可以使用:
myString.thirdIndexOf(“(”)
…可能不会?在这种情况下,您当然需要使用第三个的位置(通过再次使用
indexOf(String,startIndex)从子字符串获取索引)
Matcher matcher = Pattern.compile("(state)(\(.*?\))").matcher(text);
String state = matcher.group(2);
 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);