Рубрики
Без рубрики

Странная причуда подстроки

Время от времени вы когда-нибудь сталкивались с причудой в языке программирования, что вы вполне делаете… С пометкой java, программирование, информатика.

Время от времени вы когда-нибудь сталкивались с причудой в языке программирования, которую, как вы цитируете, не понимаете, но все же смирились с этим.

Одной из таких особенностей является 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”