Как вернуть следующий indexOf после предыдущего?

Например:

str = "(a+b)*(c+d)*(e+f)"
str.indexOf("(") = 0
str.lastIndexOf("(") = 12

Как получить индекс во второй скобке? (c+d) ‹- это


person rustock    schedule 24.04.2013    source источник


Ответы (5)


Попробуйте это:

 String word = "(a+b)*(c+d)*(e+f)";
 String c = "(";
  for (int index = word.indexOf(c);index >= 0; index = word.indexOf(c, index + 1)) {
       System.out.println(index);//////here you will get all the index of  "("
    }
person Alya'a Gamal    schedule 24.04.2013
comment
@baraky: index >= 0; - это условие в цикле for, извините, я снова откатываюсь к своему ответу :( - person Alya'a Gamal; 24.04.2013
comment
Все еще полезно почти 7 лет спустя :). - person Mario; 04.02.2020

int first  = str.indexOf("(");
int next = str.indexOf("(", first+1);

ознакомьтесь с документацией по API

person wrm    schedule 24.04.2013

Вы можете использовать StringUtils из Apache Commons, в данном случае это будет

StringUtils.indexof(str, ")", str.indexOf(")") + 1);

Идея в том, что в последнем параметре можно указать начальную позицию, чтобы можно было избежать первого ")".

person maxivis    schedule 24.04.2013

  • Используйте charAt() несколько раз
  • Используйте indexOf() несколько раз

Попробуйте это простое решение общего назначения:

    int index =0;
    int resultIndex=0;
    for (int i = 0; i < str.length(); i++){
        if (str.charAt(i) =='('){
            index++;
            if (index==2){
            resultIndex =i;
            break;
            }
        }
    }
person Achintya Jha    schedule 24.04.2013

Я думаю, есть лучший метод !!!

String str = "(a+b)*(c+d)*(e+f)";
str = str.replace(str.substring(str.lastIndexOf("*")), "");
int idx = str.lastIndexOf("(");

и "(с+г)":

   str = str.substring(idx);
person VincentLamoute    schedule 24.04.2013