Альтернатива String.format для CodenameOne - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь перенести библиотеку на основе Java в CodenameOne, чтобы использовать ее в кроссплатформенном проекте, но в ней используется множество стандартных API-интерфейсов Java, которые я не могу найти в CodenameOne, прежде всего String.format.

Я прочитал эти вопросы и ответы и понял, что есть несколько служебных библиотек, которые реализуют то, чего не хватает в базовых классах.Есть ли класс библиотеки, который реализует String.format?

В качестве примера мне нужно сделать что-то вроде String.format("%02d:%02d:%02d", hh, mm, ss);

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете использовать com.codename1.l10n.SimpleDateFormat для форматирования времени, хотя лично я просто использую служебный Java-код для форматирования, поскольку это проще.С Date мы попадаем в сложности часового пояса, и это боль в шее.

Я просто обычно делаю:

public static String twoDigits(int v) {
    return v < 10 ? "0" + v : "" + v;
}

Тогда:

String t = twoDigits(hh) + ":" + twoDigits(mm) + ":" + twoDigits(ss);

Обратите вниманиечто этот код более эффективен, чем код Format.Вызов Format должен проанализировать форматирование и затем сгенерировать результирующую строку, что является дорогостоящим шагом.Вероятно, не будет заметно в большинстве случаев, хотя.

Основная проблема, с которой мы сталкиваемся с String.format(), заключается в ее присутствии в String.Поскольку String является основной частью реализации, такой сложный метод добавит вес каждому приложению независимо от необходимости.Также реализация такого метода с таким количеством нюансов означала бы, что на симуляторе все будет работать иначе, чем на устройстве.Поэтому маловероятно, что мы когда-либо добавим этот метод.

На самом деле в JavaSE этот метод на самом деле является просто формой MessageFormat, которую мы могли бы добавить в пакет codename1 l10n.Несовместимость не будет проблемой, равно как и размер / сложность.Это то, что вы можете реализовать самостоятельно и даже подать как запрос на выборку, если пожелаете.Вы можете основывать свою реализацию на исходных текстах проекта Apache, лицензированных Apache, или же вы можете создать реализацию чистой комнаты (что я часто находил проще).

...