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