2009-12-14 2 views
7

Я читаю последовательный буфер с помощью метода readLine(). Строка, возвращаемая readLine(), находится в формате «str1: str2». В цикле в то время, когда я использую Readline номер() раз для ответа команды последовательного порта я получаю странный результат, как это:Форматирование строк в java

String1 : string1 
SString11 : String2 
StringString2 : String23 
String4 : String5 

Но мне нужен выход форматированный, как показано ниже

String1  : string1 
SString11  : String2 
StringString2 : String23 
String4  : String5 

I использовал метод split в строке и получил две строки, разделенные разделителем как ':'. Но теперь мне нужно добавить String1 с пробелами, чтобы выровнять все двоеточия.

Прошу прощения, если моя проблема объясняется странно. Но если кто-нибудь понял проблему, можете ли вы предложить, как это сделать?

ответ

6

Посмотрите на System.out.printf

+1

Я использовал String.format() и работал. Но есть и другая проблема. Проблема в том, что я помещаю строку вывода в экземпляр JTextArea. Я выбрал шрифт как Arial. При печати, например, String.format («% - 30s:% 30s», temp [0], temp [1]); Он печатает как Название изображения: прошивка Linux Linux Версия: 2.1.1.17 В приведенных выше двух строках «I» в слове «Изображение» и «V» в слове Версия имеет разную ширину в текстовой области. Поэтому, хотя я использую 30 символов, двоеточия не выравниваются. Есть ли решение для этого? –

+0

взгляните на java.awt.FontMetrics (может быть ... прошло много времени с тех пор, как я заботился о ширине текстового поля/области :-) – TofuBeer

+1

Вам нужно использовать шрифт, такой как Courier, это называется шрифт «моноширинный», означающий, что все символы имеют равную ширину. Это, конечно же, означает, что если вы выровняете символы в строке, выровняете их также и на выводе. –

18

Самый простой способ для достижения этой цели является использование System.out.format(). Это позволяет использовать C printf спецификаторы формата стиля. Пример:

System.out.format("%-5s:%10s\n", "Name", "Nemo"); 
System.out.format("%-5s:%10d\n", "Age", 120); 

Это Выведет:

Name :  Nemo 
Age :  120 

Также см документацию для Formatter класса, чтобы узнать больше о синтаксисе форматной строки.

+0

Спасибо за ответ. Могу ли я получить форматированный вывод, хранящийся в строке, вместо отправки в поток System.out? Есть ли API? –

+2

Вы можете использовать String.format() так же, как System.out.format(), чтобы получить результат как строку. – tangens

+0

+1 для ссылки на java.util.Formatter, который, возможно, более полезен для плаката вопросов, чем формат System.out() или printf(), поскольку он может форматировать произвольные потоки, и на почте неясно, какое место назначения выход есть. – charstar

4

System.out.format ("% 30s:% s", str1, str2);

Распечатайте первую строку с фиксированной шириной 30 символов.

+0

Мне нравится правильное обоснование первого параметра здесь! –

Смежные вопросы