Ответ 1
0: U
1: n
2: i
3: v
4: e
5: r
6: s
7: i
8: t
9: y
Начальный индекс включен
Конечный индекс является эксклюзивным
Код:
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
.
0: U
1: n
2: i
3: v
4: e
5: r
6: s
7: i
8: t
9: y
Начальный индекс включен
Конечный индекс является эксклюзивным
Оба основаны на 0, но начало является инклюзивным, а конец - эксклюзивным. Это гарантирует, что результирующая строка имеет длину start - end
.
Чтобы упростить работу с substring
, представьте, что символы находятся между индексами.
0 1 2 3 4 5 6 7 8 9 10 <- available indexes for substring
u n i v E R S i t y
↑ ↑
start end --> range of "E R S"
Цитирование документов:
beginIndex
начинается с указанногоbeginIndex
и продолжается до символа с индексомendIndex - 1
. Таким образом, длина подстроки равнаendIndex-beginIndex
.
Смотрите Javadoc. Это инклюзивный индекс для первого аргумента и эксклюзивный для второго.
Как и вы, я не нашел, что это было естественно. Мне обычно приходится напоминать себе, что
длина возвращаемой строки
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));
}
}
Вывод: "вот во"
От 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));
}
}
Вывод: "мир лоу"
От 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. Ну и что? Я предполагаю, что было легче запомнить, что оба являются включающими, а не вспоминать начало включительно, а конец - исключительно.