Форматирование строк Java

Java Программирование и разработка

Форматирование строки позволяет определенным образом вставлять в основную строку другие символы, подстроки или числовые значения. Рассмотрим код:

String str = String.format(«There is %s, %s, %s and %s.»«orange»«banana»«pear»«lemon»);
System.out.println(str);

Результат:

There is orange, banana, pear and lemon.

В этом статическом методе format() класса String есть пять аргументов. Первый аргумент — это основная интересующая строка, содержимое которой имеет четыре заполнителя, каждый из которых равен %s. Вместе остальные аргументы называются списком аргументов. При прочих равных первый аргумент в списке аргументов соответствует первому заполнителю в основной строке (слева). Второй аргумент в списке соответствует второму заполнителю в основной строке. Третий аргумент в списке аргументов соответствует третьему заполнителю в основной строке и так далее. На выходе заполнители заменяются соответствующими им аргументами заданным образом из списка аргументов.

Здесь рассматриваются пять аргументов. Самый первый не входит в список рассматриваемых аргументов. На самом деле она называется строкой формата, хотя ее еще нужно отформатировать. Это всегда строка. Остальные аргументы, образующие список аргументов, могут быть разных типов, не обязательно строковыми. Примечание: заполнитель здесь называется спецификатором формата.

Все приведенные выше аргументы можно заменить переменными, как показано в следующем фрагменте кода:

String a = «orange», b = «banana», c = «pear», d = «lemon»;
String fmtStr = «There is %s, %s, %s and %s.»;
String str = String.format(fmtStr, a, b, c, d);
System.out.println(str);

В этой статье объясняются основы форматирования строки в Java с использованием спецификаторов формата.

Синтаксис спецификатора формата

Синтаксис спецификатора формата:

%[argument_index$][flags][width][.precision]conversion

Он должен начинаться со знака процента, %. Он должен заканчиваться символом, называемым преобразованием. В приведенном выше коде каждый спецификатор состоит из % и ’s’. ’s’ — это преобразование. ’s’ означает строку. Остальные параметры, указанные в синтаксисе в квадратных скобках, являются необязательными и поясняются ниже.

argument_index$

argument_index$ — десятичное целое число. Он начинается с 1. Это может быть 1$, 2$, 3$ и т. д. Обычные соответствия спецификаторов и аргументов в списке аргументов следующие: первый спецификатор слева в строке формата соответствует первый аргумент в списке аргументов (слева); второй спецификатор слева в строке формата соответствует второму аргументу в списке аргументов; третий спецификатор слева в строке формата соответствует третьему аргументу в списке аргументов; и так далее. arguments_index можно использовать для изменения этого порядка. Следующий сегмент кода меняет порядок:

String str = String.format(«Here: %4$c, %3$c, %2$c and %1$c»‘1’‘2’‘3’‘4’);
System.out.println(str);

Результат:

Here: 432 and 1

’c’ в спецификаторе соответствует символу в списке аргументов. Обычный порядок: 1$, 2$, 3$, 4$. Поскольку этот порядок был обратным в строке формата, поэтому вывод вышел в обратном порядке.

Читайте также:  Языки программирования высокого и низкого уровня

Преобразование

Преобразование в строковом форматировании — это специальный символ. Каждый спецификатор формата с его преобразованием соответствует аргументу в списке аргументов. Конверсия — это символ. В следующей таблице приведены преобразования и их значения:

Символы преобразования и их значения

Преобразование Имея в виду
b Для форматирования аргумента, который является логическим
с Для форматирования аргумента, который является символом Unicode
s Для форматирования аргумента, который является строкой
d Для форматирования аргумента, который является десятичным целым числом
f Для форматирования аргумента, представляющего собой число с десятичной точкой
% Для печати только % в качестве аргумента ‘%’
n Вызывать остальной текст справа от него, переходить на следующую строку при выводе

Использование «s» и «c» было проиллюстрировано выше. Остальные метасимволы преобразования будут проиллюстрированы в этом разделе.

Символ преобразования b

В следующем фрагменте кода показано, как спецификатор формата для bool заменяется логическим значением соответствующего аргумента:

String str = String.format(«It is %b that he passed.»true);
System.out.println(str);

Результат:

It is true that he passed.

Обратите внимание, что аргумент true не заключен в кавычки.

Символ преобразования d

В следующем сегменте кода показано, как спецификатор формата для десятичного целого числа заменяется значением соответствующего аргумента:

String str = String.format(«I have %d pens.»5);
System.out.println(str);

Результат:

I have 5 pens.

Обратите внимание, что аргумент 5 не заключен в кавычки, поскольку это не символ.

Символ преобразования f

В следующем сегменте кода показано, как спецификатор формата для числа с десятичной точкой заменяется соответствующим значением аргумента:

String str = String.format(«%f is an improper fraction.»2.5);
System.out.println(str);

Во-первых, обратите внимание, что аргумент 2.5 не заключен в кавычки, поскольку это не строка. Результат:

2.500000 is an improper fraction.

2.5 был отформатирован в 2.500000, форматирование по умолчанию. Его можно ограничить до 2,5, как указано — см. ниже.

Символ преобразования %

Поскольку символ процента используется для идентификации спецификатора формата, необходимо разработать схему, позволяющую использовать символ % в качестве обычного символа в строке формата. Схема проста: используйте % в качестве символьного аргумента в списке аргументов. Затем используйте символ преобразования % в той позиции в строке формата, где должен стоять символ процента. Следующий сегмент кода иллюстрирует это:

String str = String.format(«It is 100%%.»,‘%’);
System.out.println(str);

Результат:

It is 100%.

Спецификатор формата: %%. Первый % пары, %%, идентифицирует спецификатор. Второй % — это символ преобразования. В качестве аргумента % заключен в одинарные кавычки.

Символ преобразования n

Чтобы остальная часть текста справа от строки формата переместилась на следующую строку вывода, используйте n. n — это символ преобразования, используемый в спецификаторе формата. Иллюстрация:

String str = String.format(«First sentence.%nSecond sentence.»,\n);
System.out.println(str);

Результат:

First sentence.
Second sentence.

Параметр .precision спецификатора формата

Этот параметр указывает количество десятичных знаков для числа с десятичными разрядами. Это целое число, которому предшествует точка. Как отмечалось выше, ожидаемое количество знаков после запятой для числа 2,5 равно одному символу; но было использовано 6 символов, что дало 2,500000. Следующий сегмент кода ограничивает это до 3 знаков после запятой:

String str = String.format(«%.3f is an improper fraction.»2.5);
System.out.println(str);

Результат:

2.500 is an improper fraction.

Код точности здесь .3.

Читайте также:  Простое руководство по интерфейсам Typescript: объявление и варианты использования

Параметр ширины спецификатора формата

Ширина — это минимальное количество символов для замены в строке формата. Некоторые типы аргументов заменяют спецификатор формата ожидаемой шириной. Однако другие могут заменить его на меньшую или большую ширину. Как отмечалось выше, ожидаемая ширина для 2.5 — три символа; но было использовано 8 символов, что дало 2,500000. Следующий сегмент кода должен ограничивать ширину до 4 символов и трех знаков после запятой:

String str = String.format(«%4.3f is an improper fraction.»2.5);
System.out.println(str);

Результат:

2.500 is an improper fraction.

Спецификатор формата — %4.3f, где 4 — ширина, а 3 — количество знаков после запятой. На самом деле на выходе 5 символов, включая десятичную точку, поэтому 4 фактически проигнорированы. Следующий сегмент кода имеет ширину 7 символов и 3 десятичных разряда:

String str = String.format(«%7.3f is an improper fraction.»2.5);
System.out.println(str);

Результат:

‘ ‘‘ ‘2.500 is an improper fraction.

Обратите внимание, что два пробела предшествуют цифре для полного числа, чтобы компенсировать ширину в семь символов. Количество десятичных разрядов равно 3. Здесь всего 7 символов, включая десятичную точку.

Параметр flags спецификатора формата

Флаг 0

Вместо того, чтобы перед числом стояли пробелы, перед числом можно поставить 0. Следующий сегмент кода иллюстрирует это:

String str = String.format(«%07.3f is an improper fraction.»2.5);
System.out.println(str);

Результат:

002.500 is an improper fraction.

Точный спецификатор формата здесь,

%07.3f

который следует сравнить с синтаксисом спецификатора формата,

%[argument_index$][flags][width][.precision]conversion

Порядок метасимволов спецификатора точного формата соответствует порядку синтаксиса спецификатора формата. Необязательный флаг 0 стоит перед необязательной шириной 7, которая стоит перед необязательной точностью.3 в соответствии с синтаксисом. ’f’ — это преобразование (все еще метасимвол).

Флаг +

С флагом + целочисленному результату всегда предшествует — или +. Следующая программа иллюстрирует это:

String str = String.format(«The result is %+d euros.»5);
System.out.println(str);

Результат:

The result is 5 euros.

Необязательные параметры ширины и точности не включены в спецификатор точного формата %+d. Здесь d — преобразование целого числа.

Рассмотрим сегмент кода,

String str = String.format(«The result is %+d euros.»5);
System.out.println(str);

Выход:

The result is +5 euros.

Заключение

Аргументы метода формата String разделены на две части. Первый раздел — это первый аргумент, который должен быть строкой. Это строка интереса. Она называется строкой формата, хотя некоторые из ее подстрок по-прежнему являются правильными (отформатированными). Остальные аргументы называются списком аргументов. Список аргументов содержит настоящие подстроки, требующие форматирования. Каждая из этих подстрок соответствует спецификатору формата в строке формата. Спецификатор формата использует для форматирования метасимволы.

Оцените статью
bestprogrammer.ru
Добавить комментарий

Adblock
detector