Ознакомьтесь с нашей политикой обработки персональных данных
03:37 

CD_Eater
в опе ещё играет детство, а жить уже надо по-взрослому
А знаете ли Вы, что вот эти две строчки не взаимозаменяемы?

if (siteName.toUpperCase().equals("DIARY.RU"))
if (siteName.toLowerCase().equals("diary.ru"))


бывают случаи, когда эти if-ы ветвятся по-разному для одного и того же значения переменной siteName типа String

@темы: отлично замаскированные грабли, Java

Комментарии
2015-04-25 в 09:51 

yulia_shabunio
меняю пропорции мира в сторону розовых пони
Есть буквы, которые при таком преобразовании исчезают вовсе?

2015-04-25 в 12:22 

CD_Eater
в опе ещё играет детство, а жить уже надо по-взрослому
нет, количество букв не меняется.
но преобразование toUpperCase / toLowerCase в некоторых случаях может вас удивить. я бы даже сказал шокировать.
говорят, это давно и широко известная вещь, но я узнал только недавно
люди в реальных проектах натыкались на эти грабли

2015-04-25 в 12:38 

yulia_shabunio
меняю пропорции мира в сторону розовых пони
CD_Eater, ок... Не исчезнуть, но превратиться в латинскую букву?

2015-04-25 в 12:52 

CD_Eater
в опе ещё играет детство, а жить уже надо по-взрослому
да, дело в том, во что она превратится )))

2015-04-25 в 13:11 

yulia_shabunio
меняю пропорции мира в сторону розовых пони
CD_Eater, дай уже конкретику! )))

2015-04-25 в 13:56 

CD_Eater
в опе ещё играет детство, а жить уже надо по-взрослому
подождём немного, может сюда заглянет знающий человек и продемонстрирует свою эрудицию ;)

2015-04-25 в 15:12 

Dark Dragon
бинарный романтик
Бывает. Если строка содержит лигатуру или символы, у которых нет точного соответствия в ином регистре. То есть лигатура при апперкейсе может вдруг стать двумя символами Юникода из одного. Или тремя. И вообще есть еще много нюансов. В латинице строчный вариант I - это i, и наоборот, но в каких-то языках, использующих латинницу, это не так. Ну то есть I при ловеркейсе не даст i, а i при апперкейсе не даст I. Как-то так. Языки не упомню, давно читал про это.

2015-04-25 в 16:24 

yulia_shabunio
меняю пропорции мира в сторону розовых пони
Dark Dragon, чтобы получилось так как тут показано, какой-то символ должен при аппекрейсе дать латинскую букву!
ИЛи дать отсутствие буквы.

2015-04-25 в 17:00 

CD_Eater
в опе ещё играет детство, а жить уже надо по-взрослому
Dark Dragon, да, проблема именно с буквой i в турецкой локали.
У них 2 буквы i - одна с точкой, другая без, и к ним есть соответствующие заглавные (тоже одна с точкой, другая без).
Upper İ (U+0130) I (U+0049)
Lower i (U+0069) ı (U+0131)
А всё из-за того, что toUpperCase() по умолчанию использует текущую локаль ОС.

Комментирование для вас недоступно.
Для того, чтобы получить возможность комментировать, авторизуйтесь:
 
РегистрацияЗабыли пароль?

ru_programming

главная