文本看起来不"对齐",因为字符的宽度不同.中文字符比其他字符占用更多的横向空间.
这个问题可能可以通过使用以相同宽度显示所有内容的字体来解决,尽管我不知道有这样的字体.
这不会适用于Unicode中的每个代码点,但如果您只使用拉丁字母和中文字符,我建议将String.format
个输出转换为full width characters.您可以通过ICU4J中的Transliterator
轻松做到这一点.
示例:
public static void main(String[] args) {
var s1 = String.format("%1$10s (%2$2s)", "孙悟空", 1);
var s2 = String.format("%1$10s (%2$2s)", "唐僧", 2);
var s3 = String.format("%1$10s (%2$2s)", "hello", 3);
System.out.println(toFullWidth(s1));
System.out.println(toFullWidth(s2));
System.out.println(toFullWidth(s3));
}
static String toFullWidth(String s) {
Transliterator t = Transliterator.getInstance("Halfwidth-Fullwidth");
return t.transliterate(s);
}
输出:
孙悟空 ( 1)
唐僧 ( 2)
hello ( 3)
如果您认为仅为此而使用ICU 4 J就有些过分了,那么您可以随时为您关心的字符硬编码自己的Map<Character, Character>
.请参阅Wikipedia上的全宽字符列表.