Перейти к основному содержимому

Заполните строку нулями или пробелами в Java

· 4 мин. чтения

1. Обзор

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

Подход для правой заполненной строки очень похож, поэтому мы укажем только на различия.

2. Дополнить строку с помощью пользовательских методов

Класс String в Java не предоставляет удобного метода заполнения, поэтому давайте создадим несколько методов самостоятельно. Однако сначала давайте установим некоторые ожидания:

assertEquals("    123456", padLeftZeros("123456", 10));
assertEquals("0000123456", padLeftZeros("123456", 10));

2.1. Использование StringBuilder

Мы можем добиться этого с помощью StringBuilder и некоторой процедурной логики:

public String padLeftZeros(String inputString, int length) {
if (inputString.length() >= length) {
return inputString;
}
StringBuilder sb = new StringBuilder();
while (sb.length() < length - inputString.length()) {
sb.append('0');
}
sb.append(inputString);

return sb.toString();
}

Здесь мы видим, что если длина исходного текста равна или превышает желаемую длину, мы возвращаем его неизмененную версию. В противном случае мы создаем новую строку, начиная с пробелов и добавляя исходную.

Конечно, если бы мы хотели дополнить другим символом, мы могли бы просто использовать его вместо 0 .

Точно так же, если мы хотим заполнить правую часть, нам просто нужно вместо этого сделать new StringBuilder(inputString), а затем добавить пробелы в конце.

2.2. Использование подстроки

Другой способ сделать левое заполнение — создать строку нужной длины, содержащую только символы заполнения, а затем использовать метод substring () :

StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append(' ');
}

return sb.substring(inputString.length()) + inputString;

2.3. Использование String.format

И, наконец, начиная с Java 5, мы можем использовать String .format() :

return String.format("%1$" + length + "s", inputString).replace(' ', '0');

Следует отметить, что по умолчанию операция заполнения будет выполняться с использованием пробелов. Вот почему нам нужно использовать метод replace() , если мы хотим дополнить нулями или любым другим символом.

Для правой панели нам просто нужно использовать другой флаг: %1$-

3. Дополнить строку с помощью библиотек

И есть внешние библиотеки, которые уже предлагают функции заполнения.

3.1. Apache Commons Ланг

Apache Commons Lang предоставляет пакет служебных классов Java. Одним из самых популярных является StringUtils .

Чтобы использовать его, нам нужно включить его в наш проект, добавив его зависимость в наш файл pom.xml :

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>

А затем мы передаем inputString и длину , как и в созданных нами методах. Мы также можем передать символ заполнения:

assertEquals("    123456", StringUtils.leftPad("123456", 10));
assertEquals("0000123456", StringUtils.leftPad("123456", 10, "0"));

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

Существуют также соответствующие методы rightPad() .

Чтобы изучить дополнительные возможности Apache Commons Lang 3, вы можете ознакомиться с нашим вводным руководством . Если вы хотите увидеть другие способы манипуляции со строками с помощью класса StringUtils , обратитесь к этой статье .

3.2. Google Гуава

Еще одна библиотека, которую мы можем использовать, — это Google Guava . Конечно, сначала нам нужно добавить его в проект, добавив его зависимость :

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>

А затем используйте класс Strings :

assertEquals("    123456", Strings.padStart("123456", 10, ' '));
assertEquals("0000123456", Strings.padStart("123456", 10, '0'));

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

Для правой панели мы можем использовать метод padEnd() .

Библиотека Guava предлагает гораздо больше функций, и мы рассмотрели многие из них. Вы можете найти здесь статьи, связанные с гуавой .

4. Вывод

В этой быстрой статье мы показали, как мы можем заполнить строку в Java. Мы представили примеры с использованием наших собственных реализаций или существующих библиотек.

Как обычно, полный исходный код можно найти на GitHub .