如何将 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来加密url的传递参数

js中,indexOf()substring()和substr()的区别

关于indexof和substring经常记不住的点

c# substring indexof

字符串截取子串(Java substring , indexOf)

js中substr,substring,indexOf,lastIndexOf等的用法