2013-09-17 3 views

ответ

7

Как насчет чего-то подобного?

int getIndex(String str, String substring) 
{ 
    return Arrays.asList(str.split("\\s+")).indexOf(substring)+1; 
} 

Отказ от ответственности: Это не совсем эффективно. Он разбивает всю строку с нуля каждый раз, когда вызывается функция.

тестовый код:

String str = "abc def ghi"; 
System.out.println(getIndex(str, "abc")); 
System.out.println(getIndex(str, "def")); 

Печать:

1 
2 

Пояснение:

str.split("\\s+") разбивает строку на белом пространстве и помещает каждую часть в положение в массиве.

Arrays.asList возвращает ArrayList для массива.

indexOf(substring) находит положение строки в ArrayList.

+1 Поскольку Java использует 0-индексацию, и вы хотите 1-индексирование.

+0

+1 для одного лайнера, но, возможно, расширение вашего кода сделает его более читаемым для OP ... – Marc

+0

@Marc Кажется, такой отход, чтобы сделать его дольше. Я надеюсь, что добавленное объяснение сделает его достаточно читаемым. – Dukeling

+0

Это прекрасно! – Marc

1

Поскольку вы не запрашиваете индекс подстроки, а вместо того, какая позиция слова принадлежит подстроке, такой встроенный метод недоступен. Но вы можете разбить строку ввода символом пробела и прочитать каждый элемент в списке, возвращаемом методом split, и проверить, в какой позиции позиции позиции находится ваша подстрока.

Дайте мне знать, если вам нужен код для этого.

+1

-1 Хорошее объяснение, но вы всегда должны показывать код в своем ответе, иначе это всего лишь длинный комментарий – CodingIntrigue

+0

Спасибо RGraham за ценную обратную связь. Я буду добиваться этого. – MansoorShaikh

+1

@RGraham Конечно, код обычно помогает лучше объяснить. Но я не согласен, что нужно всегда * добавлять код в ответы. Хорошим ответом также является руководство для ОП. –

1

Я не думаю, что для этого есть нативная функция. Но вы можете написать свое.

Похоже, вы хотите разбить строку на основе символа пробела.

String[] parts = string.split(" "); 

Петля через массив создан. И возвращают индекс + 1 (как Java имеет нулевые индексы на основе)

for(int i = 0; i < parts.length; i++) 
{ 
    if(parts[i].equals(parameter)) 
    { 
    return i + 1; 
    } 
} 
0

Если вы ищете, чтобы найти несколько позиций одного и те же строки, попробуйте этот код.

//Returns an array of integers with each string position 
private int[] getStringPositions(String string, String subString){ 
     String[] splitString = string.split(subString); //Split the string 

     int totalLen = 0; //Total length of the string, added in the loop 

     int[] indexValues = new int[splitString.length - 1]; //Instances of subString in string 

     //Loop through the splitString array to get each position 
     for (int i = 0; i < splitString.length - 1; i++){ 

      if (i == 0) { 
       //Only add the first splitString length because subString is cut here. 
       totalLen = totalLen + splitString[i].length(); 
      } 
      else{ 
       //Add totalLen & splitString len and subStringLen 
       totalLen = totalLen + splitString[i].length() + subString.length(); 
      } 

      indexValues[i] = totalLen; //Set indexValue at current i 
     } 

     return indexValues; 
    } 

Так, например:

String string = "s an s an s an s"; //Length = 15 
String subString = "an"; 

Ответ будет возвращать indexValues ​​= (2, 7, 12).

Смежные вопросы