Подтвердить что ты не робот

Форматирование вывода Java для строк

Мне было интересно, может ли кто-нибудь показать мне, как использовать метод format для Java Strings. Например, если я хочу, чтобы ширина всего моего вывода была одинаковой

Например, предположим, что я всегда хочу, чтобы мой вывод был таким же

Name =              Bob
Age =               27
Occupation =        Student
Status =            Single

В этом примере все выходные данные аккуратно отформатированы друг под другом; Как бы это сделать с помощью метода format.

4b9b3361

Ответ 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