Почему Android Lint предупреждает о String.format, использующем локаль по умолчанию при явном использовании Locale.US?

Я изначально звонил String.format сюда:

return String.format("%s %f %f", anotherString, doubleA, doubleB);

Что заставило Android Lint сгенерировать это предупреждение:

Неявное использование локали по умолчанию является распространенным источником ошибок: вместо этого используйте String.format(Locale, ...)

Поэтому я изменил его, чтобы использовать Locale.US явно на основе того, что я прочитал по адресу http://developer.android.com/reference/java/util/Locale.html разделе "Осторожно, языковой стандарт по умолчанию":

return String.format(Locale.US, "%s %f %f", anotherString, doubleA, doubleB);

Почему Android Lint по-прежнему выдает то же предупреждение? Я должен очистить проект в Eclipse, чтобы избавиться от него, когда большинство предупреждений просто исчезают, как только исправляется неправильная строка. Я не уверен, что делаю что-то не так или нет.

3 ответа

Очистка и перестройка проекта должны работать.

Кстати, вы можете использовать Locale.getDefault() "заботиться" о текстах, не написанных на английском языке.

Когда я упомянул локаль с форматом, предупреждение lint просто исчезло.

String.format(Locale.US,"%02d", selectedInt);

Подразумеваемая локаль по умолчанию в случае конвертации

призвание String#toLowerCase() или же #toUpperCase() без указания явной локали является распространенным источником ошибок. Причиной этого является то, что эти методы будут использовать текущую локаль на устройстве пользователя, и, хотя кажется, что код работает правильно при разработке приложения, в некоторых локалях произойдет сбой. Например, в турецкой локали заглавная буква для i не является I.

Если вы хотите, чтобы методы просто выполняли замену ASCII, например, для преобразования имени перечисления, вызовите String#toUpperCase(Locale.US) вместо. Если вы действительно хотите использовать текущую локаль, позвоните String#toUpperCase(Locale.getDefault()) вместо.

http://developer.android.com/reference/java/util/Locale.html

Вы можете отключить это предупреждение для всего приложения, поместите ниже код в вашем gradle (Module: app)

 android {
    ...
    lintOptions {
            disable 'DefaultLocale'
        }
    ...
    }

Просто добавьте свой язык; для английского языка,

return String.format(Locale.ENGLISH,"%s% f%f", anotherString, doubleA, doubleB);

Другие вопросы по тегам