понедельник, 7 ноября 2011 г.

Маленький сюрприз от toLowerCase()

Наверняка все вы пользовались таким прекрасным методом, как toLowerCase(). Да, очень удобный метод для перевода символов в нижний регистр. Но есть один нюанс о котором вы должны знать.
toLowerCase() выполняет преобразования относительно вашей локали. При вызове toLowerCase() в действительности вызывается toLowerCase(Locale.getDefault()).

Давайте рассмотрим следующий пример:

import java.util.Locale;

public class Temp {
    public static void main(String args[]){
        Locale.setDefault(new Locale("lt")); //Литва
        String str = "\u00cd";
        System.out.println("str: "+str+" "+str.length());
        String lowStr = str.toLowerCase();
        System.out.println("lowStr: "+lowStr+" "+lowStr.length());
    }
}

И что у нас на выходе? А вот что:
str: Í 1
lowStr: i̇́ 3
Вы это видите? Длина строки увеличилась с 1 до 3! Это может стать причиной трудноуловимой ошибки, если вы не знаете об этой особенности toLowerCase(). Но теперь-то вы в курсе. ;)
Удачи!

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.