Время от времени вы когда-нибудь сталкивались с причудой в языке программирования, которую, как вы цитируете, не понимаете, но все же смирились с этим.
Одной из таких особенностей является API подстрок, который присутствует в Java. Для начала, подстрока – это перегруженная функция – результат; существует 2 разных формы одной и той же функции.
public String substring(int beginIndex)
Возвращает новую строку, которая является подстрокой этой строки. Подстрока начинается с символа с указанным индексом и продолжается до конца этой строки.
public String substring(int beginIndex, int endIndex)
Возвращает новую строку, которая является подстрокой этой строки. Подстрока начинается с указанного индекса beginIndex и продолжается до символа с индексом endIndex – 1. Таким образом, длина подстроки равна endIndex-beginIndex.
String str = "Hello, World"; String substringOne = str.substring(7); String substringTwo = str.substring(0, 5);
Мы можем с уверенностью сказать, что выводом для substringOne будет “Мир”. Но мы были бы неправы, если бы сказали, что вывод второй подстроки будет “Привет”.
Причина в том, что конечный индекс является эксклюзивным. Модель включения/исключения является стандартной для диапазонов Java API. Одним из главных преимуществ является то, что длину строки можно использовать в качестве конечной точки без вычитания “-1” из длины.
String apollo13 = "Houston, we have a problem"; String normalPeople = apollo13.substring(9, apollo13.length());
Но действительно ли это необходимо? Java уже предоставляет перегрузку методу подстроки, который точно отражает это поведение. Все, что я пытаюсь сказать, это то, что я видел, как многие программисты ошибались. Я видел, что большинство людей забывают об исключении при предоставлении конечного индекса.
Дайте мне знать, если вы чувствуете то же самое или если я здесь совершенно не прав…
Оригинал: “https://dev.to/vineeth/the-weird-substring-quirk-4d4l”