Kotlin String.format()正在居中我的文本



根据我的理解,如果您在Kotlin中执行String.format("%3d", 4)之类的操作(任意示例可以说明我的观点),您将获得" 3"之类的字符串(在左侧填充两个空格)。出于某种原因,当我在Kotlin中这样做时,它反而是将字符串居中(所以我得到了类似" 3 "的东西)。知道为什么会这样吗?我正在阅读的所有内容都说默认为右对齐,但我没有这样做。

的例子:

hp.text = String.format("%-10st%4dt%-5st%4dt%-5st%4d", "HP:", pokemon.hp, "EVs:", pokemon.hpEv, "IVs:", pokemon.hpIv)

对于上下文,该信息是从读取玩Pokemon游戏的Desmume模拟器的内存的Lua脚本的输出中读取的。基本上这个字符串有6个部分。首先是统计的名称,然后是统计本身。其次是"电动汽车";以及该状态的电动汽车数量,以及"iv";现在,在左对齐文本(由于一些奇怪的原因确实有效)和在所有内容之间放置制表符(t)之间,我已经让它看起来……可以接受的。但这里发生的是数字似乎都在弦的中间。这是一张图片,它最终看起来像什么。

Dragonite例子

我本来希望这些数字是右对齐的,这样每个数字的15位就会对齐,但由于某种原因,这并没有发生。

链接到github repo

更新:我还尝试通过在所有百分比符号之后添加-来左对齐所有内容,这使得所有数字彼此左对齐。这对我来说太令人困惑了,我似乎一辈子都无法让它正确对齐。又是龙形,这次左对齐

更新2:我明白了,把我的答案写在下面。当我发布这篇文章时,我没有意识到的一个关键点(我采用了这个代码库,而不是从头开始创建的)是,它使用了tornado ofx,可能带有默认的非等宽字体。

我明白了!

我认为问题最终是由龙卷风的GUI元素的默认字体设置。我怀疑原因是一种非等宽字体导致空格小于字符,这样他们最终看起来居中。我通过在我想要格式化的文本中使用的样式中设置一个等宽字体来解决这个问题。

font = Font.font(java.awt.Font.MONOSPACED, 10.0)

您可能需要导入javafx.scene.text.Font.

现在看起来是这样的。我不太喜欢这个字体,所以我可能会寻找一个更好看的等宽字体,但这至少有我想要的格式。

用正确的右对齐属性。

我会留意其他可能更好的答案。

相关内容

最新更新