如何对带有重复字符的String使用substring和indexOf?

时间:2013-05-26 22:33:49

标签: java string substring indexof

我有以下String myString="city(Denver) AND state(Colorado)"; 它重复了“(”和“)”......

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

String state = myString.substring(myString.indexOf("state(")+1,myString.indexOf(")"));

但是它给了indexOutOfBoundException

有没有办法指定我需要第二个“(”在myString中? 我需要结果:String state = "Colorado";

5 个答案:

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