2014-02-14 4 views
0

Я пытаюсь использовать форматированный вывод и хотел бы знать, как бы я использовать% 10s в этом кодеФорматированного вывод в Java

package formattedoutput; 

public class FormattedOutput { 

    public static void main(String[] args) { 

    double amount; 
    amount = 43.676; 
    int spaces; 
    spaces = 77; 
    String adding; 
    adding = "check me out"; 



    System.out.printf("%1.2f%n", amount); 

    System.out.println(); 

    System.out.printf("%12d", spaces); 

    System.out.println(); 

    System.out.printf("%10s", adding); 
    } 

} 

Из того, что я не вижу никакой разницы он говорит, что «Буква« s »в конце спецификатора формата может использоваться с любым типом значения. Это означает, что значение должно выводиться в формате по умолчанию, как и в неформатированном виде. Число, например, «10» в% 10 можно добавить, чтобы указать (минимальное) количество символов. «Я использую его правильно? Если да, то почему он говорит, что спецификатор «s» может использоваться с любым типом значения?

+0

Потому что он может лечить любой объект в виде строки, используя метод 'toString'. – ajb

+0

Означает ли это, что я буду использовать только в этом случае? Когда мне нужно преобразовать в String –

+0

Обычный случай - использовать '% s' с фактическим параметром' String'. Вы сделали бы это, когда захотите проложить его пробелами, чтобы он заполнил определенную ширину, чтобы отчет выглядел красиво. Вы также можете использовать это, если у вас есть форматная строка с более чем одним значением для форматирования. Обычно вы не использовали бы просто ''% s'' как строку формата, потому что это бессмысленно. – ajb

ответ

0

% 10s сообщает, что форматирование помещает пробелы перед строкой, если оно меньше 10 символов. Вот почему вы не видите разницы. Если вы положили% 15s, вы попросите форматировать разместить достаточное количество пробелов, чтобы заполнить 15 символов вашей строкой, и в вашем примере будет помещено 3 пробела перед ним.

+0

с% 10s в выходе Я не видел разницы, но когда я увеличил его до% 15s, я увидел, что были помещены пробелы? Почему я не видел эту разницу с% 10? –

+0

Это не должно быть опубликовано как ответ, так как это вопрос. Пожалуйста, напишите как комментарий. – ajb

+0

Хорошо, потому что% 10s говорит: «если строка меньше 10 символов, тогда добавьте пробелы, чтобы сделать ее шириной 10 символов», так как ваша строка - 12 символов, она ничего не делает. Но, добавив% 15s, «если строка меньше 15 символов, добавьте пробелы, чтобы сделать ее шириной 15 символов», что было сделано с успехом в вашем случае! – Pierre

1

%s в форматированном выводе определяет, что значение должно быть распечатаны как String, вы можете использовать его для чисел или любой Object, а также, значение строки из Object определяется путем вызова метода toString. У каждого объекта есть один.

Число до s, такое как %10s, определяет минимальное количество символов, которое будет выдано. Если входная строка короче заданного числа символов, она будет добавлена ​​с пробелами. Это используется, например, для выравнивания текста вправо, например, как это:

System.out.printf("%s\n", "id"); 
System.out.printf("%s\n", "name"); 
System.out.printf("%s\n", "rank"); 

выходы

id 
name 
rank 

в то время как

System.out.printf("%5s\n", "id"); 
System.out.printf("%5s\n", "name"); 
System.out.printf("%5s\n", "rank"); 

дает

id 
name 
rank 
Смежные вопросы