3

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

String s = "æøå";
String.format(l, "%" + 10 + "s" , s);

这将产生一个带有 7 个前导空格的字符串。

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

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

4

2 回答 2

5

字符串没有字节数——它有许多字符。表示字符串所需的字节数取决于您使用的编码。我不知道任何内置的东西可以在填充方面做你想做的事情(我不认为这一个常见的要求)。您可以询问每个字符CharsetEncoder最大平均字节数,但我看不出有任何方法可以在不进行编码的情况下获取特定字符串的字节数:

Charset cs = Charset.forName("UTF-8");
ByteBuffer buffer = cs.encode("foobar");
int lengthInBytes = buffer.remaining();

如果你要对字符串进行编码你可能只想执行编码,计算出需要多少填充,然后写出编码的填充,然后写已经编码的文本。这实际上取决于您对数据的处理方式。

于 2011-11-15T07:15:24.560 回答
2
String s ="æøå";
int size = s.getBytes("UTF8").length;
String.format("%" + (10 - size) + "s" , s); 
于 2011-11-15T07:18:35.620 回答