эксНайти позицию подстроки в строке (не IndexOf)
String str = "abc def ghi";
Есть ли способ, как str.find("abc")
возвратит мне 1 и str.find("def")
вернет меня 2?
java language ..
эксНайти позицию подстроки в строке (не IndexOf)
String str = "abc def ghi";
Есть ли способ, как str.find("abc")
возвратит мне 1 и str.find("def")
вернет меня 2?
java language ..
Как насчет чего-то подобного?
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-индексирование.
Поскольку вы не запрашиваете индекс подстроки, а вместо того, какая позиция слова принадлежит подстроке, такой встроенный метод недоступен. Но вы можете разбить строку ввода символом пробела и прочитать каждый элемент в списке, возвращаемом методом split, и проверить, в какой позиции позиции позиции находится ваша подстрока.
Дайте мне знать, если вам нужен код для этого.
-1 Хорошее объяснение, но вы всегда должны показывать код в своем ответе, иначе это всего лишь длинный комментарий – CodingIntrigue
Спасибо RGraham за ценную обратную связь. Я буду добиваться этого. – MansoorShaikh
@RGraham Конечно, код обычно помогает лучше объяснить. Но я не согласен, что нужно всегда * добавлять код в ответы. Хорошим ответом также является руководство для ОП. –
Я не думаю, что для этого есть нативная функция. Но вы можете написать свое.
Похоже, вы хотите разбить строку на основе символа пробела.
String[] parts = string.split(" ");
Петля через массив создан. И возвращают индекс + 1 (как Java имеет нулевые индексы на основе)
for(int i = 0; i < parts.length; i++)
{
if(parts[i].equals(parameter))
{
return i + 1;
}
}
Если вы ищете, чтобы найти несколько позиций одного и те же строки, попробуйте этот код.
//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).
+1 для одного лайнера, но, возможно, расширение вашего кода сделает его более читаемым для OP ... – Marc
@Marc Кажется, такой отход, чтобы сделать его дольше. Я надеюсь, что добавленное объяснение сделает его достаточно читаемым. – Dukeling
Это прекрасно! – Marc