Выравнивание строки по левому, правому краю или по центру в Java

В Java мы можем выровнять строку по левому краю, правому краю или по центру в пределах указанной ширины, дополняя пробельные символы с помощью различных методов, таких как String.format(), StringUtils и пользовательской функции для очень специфичных настроек, если это необходимо.

1. Выровняйте строку с помощью String.format()

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

String formattedString = String.format(format, arg1, arg2, ...);
  • format: содержит заполнители(например, %s, %d, %f), которые указывают, куда следует вставить значения. Заполнители заменяются фактическими значениями, указанными в последующих аргументах. Спецификаторы формата могут включать флаги для выравнивания, ширины, точности и преобразования символов.
  • arg1, arg2, …: Это значения, которые вы хотите отформатировать в соответствии со строкой формата. Они вставляются в заполнители, указанные в строке формата, в том порядке, в котором они появляются.

Для выравнивания строки ширина строки указывается в виде числа, следующего сразу за спецификатором формата «%».

%[-]widths //The - flag specifies left alignment

Например, мы можем выровнять строку «Hello» с общей шириной 10, как показано ниже. Чтобы выровнять строку по центру, можно рассчитать левый и правый отступ и использовать его для выравнивания по центру.

String input = "Hello";int width = 10;int padding =(width - input.length()) / 2;String leftAlignedString = String.format("%-" + width + "s", input);String rightAlignedString = String.format("%" + width + "s", input);String centeredString = String.format("%" +(padding + input.length()) + "s", input);

2. Выравнивание строки с помощью Apache Commons StringUtils

Библиотека Apache Commons Lang включает класс StringUtils, который предоставляет методы rightPad(), leftPad() и center() для заполнения строк для выравнивания по правому, левому или центральному краю в пределах указанной ширины. Мы можем использовать эти методы для заполнения строки пустыми местами для выравнивания.

leftPad(String str, int size)rightPad(String str, int size)center(String str, int size)//Optional pad character in place of empty space. Useful in padding a number with zerosleftPad(String str, int size, char padChar)rightPad(String str, int size, char padChar)center(String str, int size, char padChar)

Использование этих методов заполнения чрезвычайно просто и делает код очень читабельным. Давайте перепишем предыдущий пример.

String input = "Hello";int width = 10;String leftAlignedString = StringUtils.rightPad(input, width);String rightAlignedString = StringUtils.leftPad(input, width);String centeredString = StringUtils.center(input, width);

3. Выравнивание строки с помощью пользовательской функции

Мы также можем создать наш собственный метод, где можно дополнительно настроить поведение, если это необходимо. Я создал служебный класс StringAlignUtils, который оборачивает всю логику внутри себя и предоставляет удобные методы, которые вы можете вызывать напрямую.

3.1. Класс StringAlignUtils

Класс StringAlignment расширяет класс java.text.Format. Format — это абстрактный базовый класс для форматирования информации, чувствительной к локали, такой как даты, сообщения и числа.

StringAlignUtils определяет три константы перечисления для порядка выравнивания.

  • ЛЕВЫЙ
  • ЦЕНТР
  • ВЕРНО

StringAlignUtils также нуждается в параметре maxChars, указывающем длину символов в одной строке. Если количество символов в данной строке больше, чем maxChars, строка разбивается на две строки.

import java.io.Serial;import java.text.FieldPosition;import java.text.Format;import java.text.ParsePosition;import java.util.ArrayList;import java.util.List;public class StringAlignment extends Format {public enum Alignment {LEFT, CENTER, RIGHT,}private final Alignment currentAlignment;private final int maxChars;public StringAlignment(int maxChars, Alignment align) {if(!isValidAlignment(align)) {throw new IllegalArgumentException("Invalid justification argument.");}if(maxChars < 0) {throw new IllegalArgumentException("maxChars must be positive.");}this.currentAlignment = align;this.maxChars = maxChars;}@Overridepublic StringBuffer format(Object input, StringBuffer where, FieldPosition ignore) {String s = input.toString();List<String> strings = splitInputString(s);strings.forEach(wanted -> {switch(currentAlignment) {case RIGHT:pad(where, maxChars - wanted.length());where.append(wanted);break;case CENTER:int toAdd = maxChars - wanted.length();pad(where, toAdd / 2);where.append(wanted);pad(where, toAdd - toAdd / 2);break;case LEFT:where.append(wanted);pad(where, maxChars - wanted.length());break;}where.append("\n");});return where;}@Overridepublic Object parseObject(String source, ParsePosition pos) {return source;}public String format(String s) {return format(s, new StringBuffer(), null).toString();}private void pad(StringBuffer to, int howMany) {to.append(" ".repeat(Math.max(0, howMany)));}private boolean isValidAlignment(Alignment align) {return align == Alignment.LEFT || align == Alignment.CENTER || align == Alignment.RIGHT;}private List<String> splitInputString(String str) {List<String> list = new ArrayList<>();if(str == null) return list;for(int i = 0; i < str.length(); i += maxChars) {int endIndex = Math.min(i + maxChars, str.length());list.add(str.substring(i, endIndex));}return list;}}

3.2 Пример выравнивания строки по левому краю

Давайте используем класс StringAlign для выравнивания строки по левому краю до длины в 50 символов.

String input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt "+ "ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris "+ "nisi ut aliquip ex ea commodo consequat.";int width = 50;StringAlignment leftAlignment = new StringAlignment(width, StringAlignment.Alignment.LEFT);String leftAlignedString = leftAlignment.format(input);System.out.println(leftAlignedString);
пример-текста-с-левым-выравниванием-java

3.3 Пример выравнивания строки по правому краю

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

String input = "Lorem ipsum..."; //complete stringint width = 50;StringAlignment rightAlignment = new StringAlignment(width, Alignment.RIGHT);String rightAlignedString = rightAlignment.format(input);System.out.println(rightAlignedString);

Вывод программы.

пример-выровненного-по-правому-текста-java

3.4 Пример выравнивания строки по центру

Наконец, используйте класс StringAlignment для выравнивания по центру строки, дополненной пустыми пробелами.

String input = "Lorem ipsum ..."; //complete stringint width = 50;StringAlignment centerAlignment = new StringAlignment(width, Alignment.CENTER);String centerAlignedString = centerAlignment.format(input);System.out.println(centerAlignedString);

Вывод программы.

пример-выровненного-по-центру-текста-java

Вы можете свободно редактировать и настраивать класс StringAlignment и его методы в соответствии со своими потребностями.

4. Заключение

Этот короткий урок Java научил нас выравнивать длинные строки в Java. Мы научились выравнивать по левому краю, по правому краю и по центру с помощью отступов с примерами.

Для простоты и читабельности рекомендуется использовать методы leftPad(), rightPad() и center() из StringUtils.

Исходный код на Github

Прокрутить вверх