Форматирование вывода Java для строк - PullRequest
44 голосов
/ 11 декабря 2010

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

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

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

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

Ответы [ 6 ]

129 голосов
/ 11 декабря 2010
System.out.println(String.format("%-20s= %s" , "label", "content" ));
  • Где% s - это строка для вас.
  • '-' выравнивает результат по левому краю.
  • 20 - ширина первой строки

Вывод выглядит так:

label               = content

В качестве справки я рекомендую Javadoc по синтаксису форматера

7 голосов
/ 11 декабря 2010

Если вы хотите минимум 4 символа, например,

System.out.println(String.format("%4d", 5));
// Results in "   5", minimum of 4 characters
6 голосов
/ 11 декабря 2010

РЕДАКТИРОВАТЬ: Это очень примитивный ответ, но я не могу удалить его, потому что он был принят.См. Ответы ниже для лучшего решения, хотя

Почему бы просто не генерировать строку пробела динамически для вставки в оператор.

Так что если вы хотите, чтобы все они начинались с 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, который более эффективен.

6 голосов
/ 11 декабря 2010

Чтобы ответить на ваш обновленный вопрос, вы можете сделать

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
1 голос
/ 21 октября 2015
@Override
public String toString()
{
  return String.format("%15s /n %15d /n %15s /n   %15s",name,age,Occupation,status);
}
0 голосов
/ 25 марта 2013

Для десятичных значений вы можете использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...