我有一个方法,类似Markdown语法,用于在命令行程序中打印"header text"。
1. =======================
2. This is a header string
3. =======================
这个方法使用一个字符
c
,针对第1和第3行,基于s
的长度重复n
次。
String.length()
对英文字母适用良好,但是如何找到包含外语多字节字符(如“Å”和“Ç”)的字符串的长度(即视觉长度)?我有一个方法,类似Markdown语法,用于在命令行程序中打印"header text"。
1. =======================
2. This is a header string
3. =======================
c
,针对第1和第3行,基于s
的长度重复n
次。
String.length()
对英文字母适用良好,但是如何找到包含外语多字节字符(如“Å”和“Ç”)的字符串的长度(即视觉长度)?String.length
对于那些常见字符是可以的,因为Java字符串使用UTF-16工作,它足以表示大多数常用字符(拉丁文、希腊文、阿拉伯文、希伯来文、中文、泰文、天城体梵文等)。
如果您可能需要处理U+FFFF以上的字符,则需要使用codePointCount
而不是length
来处理代理对。
s
是"Ø",那么s.length()
会给我一个值为2
。但我希望它是1
。而且我相信,根据您编译程序时使用的文件编码,您可能会得到不同的值。 - josocblaugranaSystem.out.println("Ø".length())
(仅此而已)返回值为 2
… 供参考,我使用的是 Mac。 - josocblaugranaInputStreamReader
传递正确的编码一样。如果您的.java
文件是UTF-8编码,但编译器将其读作ISO-8859-1或MacRoman,则会将该字符串文字视为"\u00c3\u0098"
而不是"\u00D8"
。 - Ian Roberts"\u00D8"
而不是 "Ø"
)。您可以使用 native2ascii
工具来自动化此过程。 - Ian Roberts