如何将 substring 和 indexOf 用于具有重复字符的字符串?
Posted
技术标签:
【中文标题】如何将 substring 和 indexOf 用于具有重复字符的字符串?【英文标题】:How to use substring and indexOf for a String with repeating characters? 【发布时间】:2013-05-21 18:53:29 【问题描述】:我有以下String myString="city(Denver) AND state(Colorado)";
它有重复的“(”和“)”......
如何检索州名,即科罗拉多州。我尝试了以下方法:
String state = myString.substring(myString.indexOf("state(")+1,myString.indexOf(")"));
但它给了indexOutOfBoundException
有什么方法可以指定我需要 myString 中的第二个“(”?
我需要结果:String state = "Colorado";
【问题讨论】:
【参考方案1】:使用lastIndexOf
。还要增加初始偏移量以允许子字符串state(
中的字符数:
String state = myString.substring(myString.indexOf("state(") + 6, myString.lastIndexOf(")"));
【讨论】:
感谢它的工作!我可以问一下,以防我有这个"("
重复多次,例如myString="abc(defg(h(i(k(o"
。有什么方法可以指定我需要第三个"("
?我可以使用:myString.thirdIndexOf("("))
...可能不行吗?
在这种情况下,您将使用indexOf(String, startIndex) 当然,您必须使用第三个位置(通过再次使用indexOf(String, startIndex)
从子字符串中获取索引。【参考方案2】:
您可以使用正则表达式。
Matcher matcher = Pattern.compile("(state)(\(.*?\))").matcher(text);
String state = matcher.group(2);
【讨论】:
【参考方案3】:你可以把字符串剪下来,然后在一个 sanboxed 中做。这样,如果后面有更多的“)”,就不会发生任何不好的事情
String state = myString.substring(myString.indexOf("state(")+6);
state = state.substring(0,state.indexOf(")"));
【讨论】:
【参考方案4】:您可以使用其他版本的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);
【讨论】:
【参考方案5】:您的问题是")"
的第一次出现在"state("
出现之前,因为它也出现在Denver
之后。
如果您需要最后一个索引,您可以使用lastIndexOf()
,用于"("
和")"
。如果您恰好需要第二次出现,您可以使用 version of 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);
【讨论】:
以上是关于如何将 substring 和 indexOf 用于具有重复字符的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
js中,indexOf()substring()和substr()的区别