CodenameOne上的String.format替代

时间:2018-11-20 09:47:55

标签: java cross-platform codenameone

我正在尝试将基于Java的库移植到CodenameOne以便在跨平台项目中使用它,但是它使用了很多Java标准API,而我在CodenameOne中找不到,首先是{{1} }。

我已经读过this Q&A,并且我了解到有一些实用程序库可以实现基类中缺少的内容。 是否有实现String.format的库类?

作为示例,我需要做类似String.format

的操作

1 个答案:

答案 0 :(得分:0)

您可以使用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许可的和谐项目源实现您的实现,也可以构建一个无尘室实现(我经常发现这很容易)。