Формат String в Java относительно его длины в байтах - PullRequest
3 голосов
/ 15 ноября 2011

Допустим, у меня есть строка, содержащая не ASCII-символы в Java, и я хочу использовать String.format(), чтобы установить ее так, чтобы отформатированная строка имела минимальную ширину относительно длины байта строки.

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

Это приведет к строке с 7 пробелами в начале.

Но я хочу, чтобы было только 4 пробела, так как исходная строка имеет размер 6 байт.

Это кажетсячтобы это было обычным требованием, поэтому я хотел бы спросить, есть ли уже построенный класс, который может достичь этого, или я должен сам реализовать интерфейс Formattable?

Ответы [ 2 ]

5 голосов
/ 15 ноября 2011

Строка не имеет числа байтов - она ​​имеет количество символов . Количество байтов , необходимое для представления строки, зависит от используемой вами кодировки. Я не знаю ничего встроенного, чтобы делать то, что вы хотите с точки зрения заполнения (я не думаю, что это , что является общим требованием). Вы можете запросить CharsetEncoder для максимум и среднее количество байтов на символ, но я не вижу способа получить количество байтов для конкретной строки без выполнения кодировки:

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

Если вы собираетесь кодировать строку в любом случае , вы можете просто выполнить кодирование, выяснить, какой объем заполнения требуется, затем записать закодированный отступ, а затем написать уже закодированный текст. Это действительно зависит от того, что вы делаете с данными.

2 голосов
/ 15 ноября 2011
String s ="æøå";
int size = s.getBytes("UTF8").length;
String.format("%" + (10 - size) + "s" , s); 
...