3

String.format()JavaでASCII以外の文字を含む文字列があり、フォーマットされた文字列が文字列のバイト長に関して最小幅になるように設定したいとします。

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

これにより、先頭に7つの空白が含まれる文字列になります。

ただし、元の文字列のサイズは6バイトであるため、先頭の空白は4つだけにする必要があります。

これは一般的な要件のようですので、これを実現できるビルド済みのクラスがあるかどうかを尋ねたいのですが、それともFormattable自分でインターフェイスを実装する必要がありますか?

4

2 に答える 2

5

文字列にはバイト数はありません-文字数があります。文字列を表すのに必要なバイト数は、使用するエンコーディングによって異なります。パディングに関してあなたが望むことをするために組み込まれているものは何も知りません(私はそれそれほど一般的な要件ではないと思います)。CharsetEncoder1文字あたりの最大バイト数と平均バイト数を尋ねることはできますが、基本的にエンコードを行わずに特定の文字列のバイト数を取得する方法はわかりません。

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 に答える