Java: диапазон индекса подстроки


код:

public class Test {
    public static void main(String[] args) {
        String str = "University";
        System.out.println(str.substring(4, 7));
    }   
}

выход:ers

Я действительно не понимаю, как работает метод подстроки. Начинается ли индекс с 0? Если я начну с 0, e находится в индексе 4, но char i - это на 7, так что выход будет ersi.

10 61

10 ответов:

0: U

1: n

2: я

3: v

4: e

5: r

6: s

7: я

8: t

9: y

начальный индекс включен

конечный индекс является эксклюзивным

Javadoc link

оба основаны на 0, но начало включено, а конец является эксклюзивным. Это гарантирует, что результирующая строка имеет длину start - end. Думайте о них как о позициях в строке, а не о реальных символах.

0 1 2 3 4 5 6 7 8 9
 u n i V E R s i t y
      s       e
      t       n
      a       d
      r
      t

со ссылкой на docs:

подстрока начинается в указанном beginIndex и распространяется на символ в индексе endIndex - 1. Таким образом длина подстроки равна endIndex-beginIndex.

посмотреть javadoc. Это инклюзивный индекс для первого аргумента и эксклюзивный для второго.

Как и вы, я не нашел, что это произошло естественно. Я обычно все еще должен напоминать себе, что

  • the длина возвращаемой строки

    lastIndex-firstIndex

  • что вы можете использовать длину строки в качестве lastIndex, даже если там нет символа, и попытка ссылаться на него вызовет исключение

так

"University".substring(6, 10)

возвращает 4-символьную строку "sity" даже если в позиции 10 нет символа.

да, индекс начинается с нуля (0). Два аргумента-startIndex и endIndex, где в документации:

подстрока начинается с указанного beginIndex и продолжается до символа в индексе endIndex - 1.

посмотреть здесь для получения дополнительной информации.

public String substring(int beginIndex, int endIndex)

beginIndex - начальный индекс, включительно.

endIndex-конечный индекс, эксклюзив.

пример:

public class Test {

    public static void main(String args[]) {
        String Str = new String("Hello World");

        System.out.println(Str.substring(3, 8));
    }
 }

вывод: "lo Wo"

от 3 до 7 индекса.

также есть еще один вид substring() способ:

public String substring(int beginIndex)

beginIndex - начальный индекс, включительно. Возвращает подстроку, начиная с beginIndex до конца основной строки.

пример:

public class Test {

    public static void main(String args[]) {
        String Str = new String("Hello World");

        System.out.println(Str.substring(3));
    }
}

вывод: "lo World"

от 3 до последнего индекса.

для подстроки(параметр startindex, endindex включительно), параметр startindex и endindex включительно являются эксклюзивными. StartIndex и endIndex очень запутаны. Я бы понял подстроку (startIndex, length), чтобы помнить это.

подстрока начинается с и включает символ в месте первого заданного числа и переходит к, но не включает символ в последнем заданном числе.

public class SubstringExample
{
    public static void main(String[] args) 
    {
        String str="OOPs is a programming paradigm...";

        System.out.println(" Length is: " + str.length());

        System.out.println(" Substring is: " + str.substring(10, 30));
    }
}

выход:

length is: 31

Substring is: programming paradigm

endIndex-очень запутанный термин. Я предполагаю, что мотивом было сохранить длину новой строки для endIndex - startIndex. Ну и что? Я думаю, что было легче помнить, что оба являются инклюзивными, а не помнить, что начало является инклюзивным, а конец-эксклюзивным.