Java中的格式字符串,以字节为单位

Qui*_*ncy 3 java formatter

假设我在Java中包含一个包含非ASCII字符的字符串,我想用String.format()它来设置它,这样格式化的字符串将具有字符串字节长度的最小宽度.

String s = "æøå";
String.format(l, "%" + 10 + "s" , s);
Run Code Online (Sandbox Code Playgroud)

这将导致一个带有7个前导空格的字符串.

但我想要的是应该只有4个前导空格,因为原始字符串的大小为6个字节.

这似乎是一个常见的要求所以我想问一下是否有任何已经构建的类可以实现这一点,或者我应该自己去实现Formattable接口?

Jon*_*eet 5

字符串没有多个字节 - 它有许多字符.表示字符串所需的字节数取决于您使用的编码.我不知道在填充方面做任何内置的事情(我不认为这常见的要求).你可以问CharsetEncoder最大平均每个字符的字节数,但我没有看到获得特定字符串的字节数基本上没有任何方式编码:

Charset cs = Charset.forName("UTF-8");
ByteBuffer buffer = cs.encode("foobar");
int lengthInBytes = buffer.remaining();
Run Code Online (Sandbox Code Playgroud)

如果你要在字符串编码无论如何,你可能只想进行编码,工作了多少填充是必需的,然后写编码的填充出来,然后写已编码的文本.这实际上取决于您对数据的处理方式.