Форматирование вывода Java для строк
Мне было интересно, может ли кто-нибудь показать мне, как использовать метод format для Java Strings.
Например, если я хочу, чтобы ширина всего моего вывода была одинаковой
Например, предположим, что я всегда хочу, чтобы мой вывод был таким же
Name = Bob
Age = 27
Occupation = Student
Status = Single
В этом примере все выходные данные аккуратно отформатированы друг под другом; Как бы это сделать с помощью метода format.
Ответы
Ответ 1
EDIT: Это очень примитивный ответ, но я не могу удалить его, потому что он был принят. См. Ответы ниже для лучшего решения, хотя
Почему бы просто не сгенерировать строку пробелов динамически для вставки в оператор.
Итак, если вы хотите, чтобы все они начинались с 50-го символа...
String key = "Name =";
String space = "";
for(int i; i<(50-key.length); i++)
{space = space + " ";}
String value = "Bob\n";
System.out.println(key+space+value);
Поместите все это в цикл и инициализируйте/установите переменные "ключ" и "значение" перед каждой итерацией, а вы - золотой. Я бы тоже использовал класс StringBuilder
, который более эффективен.
Ответ 2
System.out.println(String.format("%-20s= %s" , "label", "content" ));
- Где% s является заполнителем для строки.
- "-" делает результат левым оправданием.
- 20 - это ширина первой строки
Результат выглядит следующим образом:
label = content
В качестве ссылки я рекомендую Javadoc по синтаксису форматирования
Ответ 3
Если вы хотите как минимум 4 символа, например,
System.out.println(String.format("%4d", 5));
// Results in " 5", minimum of 4 characters
Но на самом деле вам нужно научиться понимать документацию.
Ответ 4
Чтобы ответить на ваш обновленный вопрос, вы можете сделать
String[] lines = ("Name = Bob\n" +
"Age = 27\n" +
"Occupation = Student\n" +
"Status = Single").split("\n");
for (String line : lines) {
String[] parts = line.split(" = +");
System.out.printf("%-19s %s%n", parts[0] + " =", parts[1]);
}
печатает
Name = Bob
Age = 27
Occupation = Student
Status = Single
Ответ 5
@Override
public String toString()
{
return String.format("%15s /n %15d /n %15s /n %15s",name,age,Occupation,status);
}
Ответ 6
Для десятичных значений вы можете использовать DecimalFormat
import java.text.*;
public class DecimalFormatDemo {
static public void customFormat(String pattern, double value ) {
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
}
static public void main(String[] args) {
customFormat("###,###.###", 123456.789);
customFormat("###.##", 123456.789);
customFormat("000000.000", 123.78);
customFormat("$###,###.###", 12345.67);
}
}
и вывод будет:
123456.789 ###,###.### 123,456.789
123456.789 ###.## 123456.79
123.78 000000.000 000123.780
12345.67 $###,###.### $12,345.67
Подробнее см. здесь:
http://docs.oracle.com/javase/tutorial/java/data/numberformat.html