- PVSM.RU - https://www.pvsm.ru -
Это заметка о проблеме, с которой я столкнулся в процессе перевода проекта с Java 7 на Java 8. Случилось это уже около полугода назад, но написать решил сейчас, потому что неожиданно про нее(проблему) вспомнил.
Итак, с места в карьер.
Вот результат выполнения кода:
package test;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println("result: " + Arrays.toString("0000".split("")));
}
}
под Java 8:
result: [0, 0, 0, 0]
и Java 7:
result: [, 0, 0, 0, 0]
Как видите строка сплитится по разному, и из за этой проблемы я словил ArrayIndexOutOfBoundsException [1].
Было неприятно, но я смог пережить, собрал всю волю в кулак и решил разобраться в чем проблема.
Вот что пишет официальная документация [2]:
When there is a positive-width match at the beginning of this string then an empty leading substring is included at the beginning of the resulting array. A zero-width match at the beginning however never produces such empty leading substring.
Т.е. теперь в ситуации когда строка разбивается по пустому символу, нулевой пустой элемент не генерируется.
Такое поведение логичнее чем старое, но поломка совместимости для меня была неожиданностью. В любом случае сделать уже ничего нельзя, поэтому я желаю вам быть внимательными и словить как можно меньше проблем :).
P.S. Уже позже я нашел обсуждение [3] этой проблемы на stackoverflow.com.
P.P.S. Как верно указал пользователь Borz [4] это был баг [5]. Видимо надо лучше читать ченджлоги.
Автор: vayho
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/73067
Ссылки в тексте:
[1] ArrayIndexOutOfBoundsException: http://docs.oracle.com/javase/8/docs/api/java/lang/ArrayIndexOutOfBoundsException.html
[2] документация: http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-
[3] обсуждение: http://stackoverflow.com/questions/22718744/why-does-split-in-java-8-sometimes-remove-empty-strings-at-start-of-result-array/22718904#22718904
[4] Borz: http://habrahabr.ru/post/241784/#comment_8096266
[5] баг: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6559590
[6] Источник: http://habrahabr.ru/post/241784/
Нажмите здесь для печати.