Primitive data types

Введение в строки. Класс String

Последнее обновление: 31.10.2018

Строка представляет собой последовательность символов. Для работы со строками в Java определен класс String, который предоставляет ряд методов для манипуляции строками.
Физически объект String представляет собой ссылку на область в памяти, в которой размещены символы.

Для создания новой строки мы можем использовать один из конструкторов класса String, либо напрямую присвоить строку в двойных кавычках:

public static void main(String[] args) {
        
    String str1 = "Java";
    String str2 = new String(); // пустая строка
    String str3 = new String(new char[] {'h', 'e', 'l', 'l', 'o'});
    String str4 = new String(new char[]{'w', 'e', 'l', 'c', 'o', 'm', 'e'}, 3, 4);//3 -начальный индекс, 4 -кол-во символов
        
    System.out.println(str1); // Java
    System.out.println(str2); //
    System.out.println(str3); // hello
    System.out.println(str4); // come
}

При работе со строками важно понимать, что объект String является неизменяемым (immutable). То есть при любых операциях
над строкой, которые изменяют эту строку, фактически будет создаваться новая строка

Поскольку строка рассматривается как набор символов, то мы можем применить метод length() для нахождения длины строки или длины набора символов:

String str1 = "Java";
System.out.println(str1.length()); // 4

А с помощью метода toCharArray() можно обратно преобразовать строку в массив символов:

String str1 = new String(new char[] {'h', 'e', 'l', 'l', 'o'});
char[] helloArray = str1.toCharArray();

Строка может быть пустой. Для этого ей можно присвоить пустые кавычки или удалить из стоки все символы:

String s = "";   // строка не указывает на объект
if(s.length() == 0) System.out.println("String is empty");

В этом случае длина строки, возвращаемая методом length(), равна 0.

Класс String имеет специальный метод, который позволяет проверить строку на пустоту — isEmpty(). Если строка пуста, он возвращает true:

String s = "";   // строка не указывает на объект
if(s.isEmpty()) System.out.println("String is empty");

Переменная String может не указывать на какой-либо объект и иметь значение null:

String s = null;   // строка не указывает на объект
if(s == null) System.out.println("String is null");

Значение null не эквивалентно пустой строке. Например, в следующем случае мы столкнемся с ошибкой выполнения:

String s = null;   // строка не указывает на объект
if(s.length()==0) System.out.println("String is empty");	// ! Ошибка

Так как переменная не указывает ни на какой объект String, то соответственно мы не можем обращаться к методам объекта String.
Чтобы избежать подобных ошибок, можно предварительно проверять строку на null:

String s = null;   // строка не указывает на объект
if(s!=null && s.length()==0) System.out.println("String is empty");

Основные методы класса String

Основные операции со строками раскрывается через методы класса String, среди которых можно выделить следующие:

  • concat(): объединяет строки

  • valueOf(): преобразует объект в строковый вид

  • join(): соединяет строки с учетом разделителя

  • сompareTo(): сравнивает две строки

  • charAt(): возвращает символ строки по индексу

  • getChars(): возвращает группу символов

  • equals(): сравнивает строки с учетом регистра

  • equalsIgnoreCase(): сравнивает строки без учета регистра

  • regionMatches(): сравнивает подстроки в строках

  • indexOf(): находит индекс первого вхождения подстроки в строку

  • lastIndexOf(): находит индекс последнего вхождения подстроки в строку

  • startsWith(): определяет, начинается ли строка с подстроки

  • endsWith(): определяет, заканчивается ли строка на определенную подстроку

  • replace(): заменяет в строке одну подстроку на другую

  • trim(): удаляет начальные и конечные пробелы

  • substring(): возвращает подстроку, начиная с определенного индекса до конца или до определенного индекса

  • toLowerCase(): переводит все символы строки в нижний регистр

  • toUpperCase(): переводит все символы строки в верхний регистр

Разберем работу этих методов.

НазадВперед

Производительность и оптимизация

В Java 6 единственная оптимизация, которую мы можем выполнить, – это увеличение пространства PermGen во время вызова программы с помощью параметра MaxPermSize JVM:

-XX:MaxPermSize=1G

В Java 7 у нас есть более подробные параметры для изучения и расширения/уменьшения размера пула. Давайте рассмотрим два варианта просмотра размера пула:

-XX:+PrintFlagsFinal
-XX:+PrintStringTableStatistics

Если мы хотим увеличить размер пула с точки зрения ведер, мы можем использовать параметр StringTableSize JVM:

-XX:StringTableSize=4901

До Java 7u40 размер пула по умолчанию составлял 1009 ведер, но это значение было подвержено нескольким изменениям в более поздних версиях Java. Если быть точным, размер пула по умолчанию с Java 7u40 до Java 11 составлял 60013, а теперь он увеличился до 65536.

Обратите внимание, что увеличение размера пула будет потреблять больше памяти, но имеет преимущество в сокращении времени, необходимого для вставки Строки в стол

Производительность конкатенации

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

String one = "Hello";
String two = " World";

String three = new StringBuilder(one).append(two).toString();

Создается новый StringBuilder, который передает первую строку в свой конструктор, а вторую – в свой метод append(), прежде чем вызвать метод toString(). Этот код фактически создает два объекта: экземпляр StringBuilder и новый экземпляр String, возвращенный методом toString().

При выполнении самих себя в виде одного оператора эти дополнительные затраты на создание объекта незначительны. Однако когда выполняется внутри цикла, это другая история.

Вот цикл, содержащий вышеуказанный тип конкатенации строк:

String[] strings = new String[]{"one", "two", "three", "four", "five" };

String result = null;
for(String string : strings) {
    result = result + string;
}

Этот код будет скомпилирован в нечто похожее на это:

String[] strings = new String[]{"one", "two", "three", "four", "five" };

String result = null;
for(String string : strings) {
    result = new StringBuilder(result).append(string).toString();
}

Теперь для каждой итерации в этом цикле создается новый StringBuilder. Кроме того, объект String создается методом toString(). Это приводит к небольшим расходам на создание экземпляров за одну итерацию: один объект StringBuilder и один объект String. Само по себе не является настоящим убийцей производительности, хотя.

Каждый раз, когда выполняется новый код StringBuilder(result), конструктор StringBuilder копирует все символы из результирующего String в StringBuilder. Чем больше итераций цикла, тем больше будет результат String. Чем больше растет результат String, тем больше времени требуется для копирования символов из него в новый StringBuilder и повторного копирования символов из StringBuilder во временную строку, созданную методом toString(). Другими словами, чем больше итераций, тем медленнее становится каждая итерация.

Самый быстрый способ объединения строк – создать StringBuilder один раз и повторно использовать один и тот же экземпляр внутри цикла. Вот как это выглядит:

String[] strings = new String[]{"one", "two", "three", "four", "five" };

StringBuilder temp  = new StringBuilder();
for(String string : strings) {
    temp.append(string);
}
String result = temp.toString();

Этот код избегает как экземпляров объектов StringBuilder и String внутри цикла, так и, следовательно, позволяет избежать двухкратного копирования символов, сначала в StringBuilder, а затем снова в String.

Присоединение, объединение или добавление строк в Java

Самый простой способ объединить строки в Java — это использовать +. Это работает так:

String text1 = "Hello";

String text2 = "Jim";

System.out.println(text1 + " " + text2);

Однако это не очень эффективно, потому что каждый раз, когда вы пишете +, вы создаете новый объект String. По этой причине вы можете использовать StringBuilder или более старую поточно-ориентированную версию StringBuffer.

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" to");
sb.append(" you");
System.out.println(sb.toString());

Более того, поскольку append() возвращает ссылку на сам объект StringBuilder, мы можем написать что-то вроде этого с тем же эффектом:

StringBuilder sb = new StringBuilder();
sb.append("Hello")
.append(" to")
.append(" you");
System.out.println(sb.toString());

Подстрока Java: выбор частей строк

Чтобы получить часть строки, используйте метод substring.

String substring(int beginIndex, int endIndex)

Длина выбранной подстроки равна endIndex — startIndex.

Вот несколько примеров.

String text = "The quick brown fox";
// Everything from index 4 onwards
System.out.println(text.substring(4));
// Index 0 up to but not including index 3.
System.out.println(text.substring(0, 3));

Java Array String: объединение массивов строк

Удивительно, но в ядре Java нет способа объединения массивов строк, хотя такие методы существуют в различных библиотеках.

Вы всегда можете создать свои собственные. Следующий класс объявляет именно такой метод и использует его для соединения массива строк. Вы можете легко адаптировать это для работы с ArrayList или Vector или чем-то еще.

package caveofprogramming.aquarium;
package caveofprogramming.aquarium;

import java.util.*;

public class Test {
    public static String join(String[] strings, String glue) {
    
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i < strings.length; i++) {
            sb.append(strings);
            
            if(i < strings.length - 1) {
                sb.append(glue);
            }
        }
        
        return sb.toString();
    }
    
    public static void main(String [] args) {

        String texts[] = {"Hello", "to", "you"};
        System.out.println(join(texts, " "));
    }
}

Java String Split: разделение строк

Вы можете разбить строку на массив токенов, используя метод split (REGEX).

Давайте посмотрим на некоторые примеры.

Чтобы разделить пробелом (это также работает для вкладок):

String text = "The quick brown fox";
String text = "The quick brown fox";
        
// Split on whitespace
String [] tokens = text.split("\s+");
        
for(int i=0; i < tokens.length; i++) {
    System.out.println(tokens);
}

Разделим электронный адрес на части

String text = "someone@nowhere.com";

// Split on @ and .
// The double backslashes make this regular
// expression look more confusing than it is.
// We are escaping once for the sake of the
// regex, and again for the sake of Java.
String [] tokens = text.split("+");

for(int i=0; i < tokens.length; i++) {
    System.out.println(tokens);
}

Java string методы — использование оператора ==

Оператор == проверяет ссылки, а не значения. Это означает, что он проверяет, являются ли сравниваемые элементы одним и тем же объектом. Если две переменные String указывают на один и тот же объект в памяти, сравнение возвращает true. В противном случае — false:

"Java" == "Java" //true

Здесь литералы интернируются компилятором и таким образом ссылаются на один и тот же объект:

new String("Java") == "Java" // false

Приведенные выше переменные String указывают на разные объекты:

new String("Java") == new String("Java") // false

Приведенные выше переменные String также указывают на разные объекты.

Оператор ‘==’ не сравнивает строки в java, а только ссылки, на которые они строки.

Пример

class TestClass{
  public static void main (String[] args){
    // ссылается на один и тот же объект, возвращает true
    if(  "Java" == "Java" ){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
    // указывает на другой объект, возвращает false
    if(new String("Java") == "Java"){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
    // указывает на другой объект, возвращает false
    if(new String("Java") == new String("Java") ){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
  }
}

Результат

Statement  is true
Statement is false
Statement is false

Немного о преобразованиях

В процессе программирования неотъемлемо происходят различные преобразования одних типов в другие. Например, может понадобиться получить из строки число для обработки его какой-либо операцией. Это очень распространённое приведение в Java String to int. На практике это выглядит так:

int переменная = Integer.parseInt(Объект_типа_String). Приведение в Java String to int может порождать и исключения. Например, когда в преобразуемой к числу строке,содержатся не только цифры, но и буквы. Естественно, что такое исключение нужно вовремя перехватить и обработать.

Существует и второй тип преобразования строки в число — Integer.valueOf(). Единственная разница между ними состоит в том, что parseInt возвращает примитивный int, а valueOf — объект типа Integer.

Массивы и перечисления очень активно используются при программировании в Java. String array — это совокупность данных, объединённых по общему признаку. Преобразовать строку массив символов очень просто — для этого используется метод toCharArray(). Он разбивает текстовые данные посимвольно и создаёт список с ними. Тип массива при этом будет char[].

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

String.valueOf(значение_или_переменная одного из нескольких типов). Результатом выполнения будет строка.

substring(int beginIndex, int endIndex)

Этот метод вернет новый объект String, содержащий подстроку данной строки от указанного startIndex до endIndex. И получит часть String, начиная с данного beginIndex и до указанного endIndex.

public String substring(int beginIndex, int endIndex)

где beginIndex — индекс, с которого нужно начать извлечение возвращаемой подстроки. (включительно) endIndex — индекс, с которого нужно закончить извлечение возвращаемой подстроки. (эксклюзив)

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

public class SubstringTest {  
   public static void main(String[] args) {
      String testString = "ABCDEFGHIJ";
      System.out.println(testString.substring(0,5));
      System.out.println(testString.substring(1,5));
      System.out.println(testString.substring(2,5));
      System.out.println(testString.substring(0,6));
      System.out.println(testString.substring(1,6));
      System.out.println(testString.substring(2,6));
      System.out.println(testString.substring(0,7));
      System.out.println(testString.substring(1,7));
      System.out.println(testString.substring(2,7));
   }
}

Вывод

ABCDE
BCDE
CDE
ABCDEF
BCDEF
CDEF
ABCDEFG
BCDEFG
CDEFG

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

import java.util.Scanner;
public class PrintAllSubstring {  
   public static void main(String[] args) {
      System.out.println("Enter a string:");
      Scanner in = new Scanner(System.in);
      String inputString = in.nextLine();
      for (int beginIndex = 0; beginIndex < inputString.length(); beginIndex++) {
         for (int endIndex = beginIndex + 1; endIndex <= inputString.length(); endIndex++) {
            System.out.println(inputString.substring(beginIndex, endIndex));
         }
      }
   }
}

И вот результат, предполагающий, что была введена строка wxyz.

Enter a string:
wxyz
w
wx
wxy
wxyz
x
xy
xyz
y
yz
z

Вот пример того, как получить середину строки с помощью метода substring в алгоритме.

public class MiddleStrTest {
   public static void main(String[] args) {
      System.out.println("A       --> " + getMiddleString("A"));
      System.out.println("AB      --> " + getMiddleString("AB"));
      System.out.println("ABC     --> " + getMiddleString("ABC"));
      System.out.println("ABCD    --> " + getMiddleString("ABCD"));
      System.out.println("ABCDE   --> " + getMiddleString("ABCDE"));
      System.out.println("ABCDEF  --> " + getMiddleString("ABCDEF"));
      System.out.println("ABCDEFG --> " + getMiddleString("ABCDEFG"));
   }
   private static String getMiddleString(String str) {
      if (str.length() <= 2) {
         return str;
      }
      int beginIndex = (str.length() - 1) / 2;
      int endIndex = beginIndex + 2 - (str.length() % 2);
      return str.substring(beginIndex, endIndex);
   }
}

Вывод

A       --> A
AB      --> AB
ABC     --> B
ABCD    --> BC
ABCDE   --> C
ABCDEF  --> CD
ABCDEFG --> D

Вот пример программы, которая перевернет строку.

public class ReverseTest {
   public static void main(String[] args) {
      System.out.println(reverse("ABCDEFG"));
   }
   private static String reverse(String str) {
      if (str.length() <= 1) {
         return str;
      }
      return reverse(str.substring(1)) + str.substring(0, 1);
   }
}

Это выведет обратную строку ABCDEFG: Вот пример программы, которая проверит, является ли строка палиндромом или нет.

public class PalTest {
   public static void main(String[] args) {
      System.out.println(palindrome("ABCBA"));
      System.out.println(palindrome("ABCCBA"));
      System.out.println(palindrome("ABCCXA"));
      System.out.println(palindrome("ABCDEFG"));
   }
   private static boolean palindrome(String str) {
      if (str.length() <= 1) {
         return true;
      }
      String first = str.substring(0, 1);
      String last = str.substring(str.length() - 1);
      return first.equals(last)
            && palindrome(str.substring(1, str.length() - 1));
   }
}

Вывод

true
true
false
false

Оцени статью

Оценить

Средняя оценка / 5. Количество голосов:

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

Спасибо за ваши отзыв!

Краткий обзор методов String

  • length(). Как следует из названия, данный метод возвращает длину строки объекта String.
  • isEmpty(). Проверяет пустоту экземпляра String.
  • concat(). Представляет собой объединение двух экземпляров текстовых данных.
  • charAt(int индекс_символа). Вернёт определённый символ из строки, номер которого указан в переменной индекс_символа.
  • compareTo(String Другая_строка). Сравнивает два объекта типа String.
  • compareToIgnoreCase(String Другая_строка). Делает то же самое, что и предыдущий, с одним отличием — игнорирует регистр символов.
  • contains(CharSequense ряд_символов). Возвращает истину или ложь, в зависимости от того, имеется ли в String искомый набор букв или цифр.
  • matches(String регулярное_выражение). Проверяет, соответствует ли строка регулярному выражению, указанному в качестве аргумента.
  • replace(CharSequense цель, CharSequense значение). Переставляет последовательность символов, указанную в цели на ту, которая передается в значении.
  • replaceAll(String регулярное_выражение, String значение). Меняет набор букв, соответствующему регулярному выражению, на то что указано во втором параметре.
  • split(String регулярное_выражение). В результате вызова данного метода возвращается массив, который разбивается на элементы согласно регулярному выражению.
  • format(Locale локаль, String формат, Object… список аргументов) форматирует строку в более удобное представление.
  • substring(int начальный_символ). Возвращает набор символов, выбранных в соответствии с указанным начальным и конечным значением.

Данный список не полный. Количество методов на самом деле гораздо больше. Но оставшиеся используются крайне редко.

Creating Format Strings

You have printf() and format() methods to print output with formatted numbers. The String class has an equivalent class method, format(), that returns a String object rather than a PrintStream object.

Using String’s static format() method allows you to create a formatted string that you can reuse, as opposed to a one-time print statement. For example, instead of −

Example

System.out.printf("The value of the float variable is " +
                  "%f, while the value of the integer " +
                  "variable is %d, and the string " +
                  "is %s", floatVar, intVar, stringVar);

You can write −

String fs;
fs = String.format("The value of the float variable is " +
                   "%f, while the value of the integer " +
                   "variable is %d, and the string " +
                   "is %s", floatVar, intVar, stringVar);
System.out.println(fs);

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

String myString = "there,,are,more,than,three,commas,,,";
String [] splitStrings = myString.split(",", -1);

for(String string : splitStrings){
    System.out.println(String.format(" \" %s \"", string));
}

будет разделена как можно больше раз, и конечные пустые строки будут добавлены в массив:

"there"
""
"are"
"more"
"than"
"three"
"commas"
""
""
""

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

Если мы установим равным , строка снова будет разделена как можно больше раз, но результирующий массив не будет содержать завершающих пустых пробелов:

String myString = "there,,are,more,than,three,commas,,,";

// Equivalent to calling the split() method with only the regex parameter
String [] splitStrings = myString.split(",", 0);

for(String string : splitStrings){
    System.out.println(String.format(" \" %s \"", string));
}

Это дало бы нам:

"there"
""
"are"
"more"
"than"
"three"
"commas"

Примечание о специальных символах

Как мы упоминали ранее, параметр , передаваемый в качестве разделителя в методе , является регулярным выражением. Мы должны обязательно избегать специальных символов, если хотим использовать их буквальное значение в качестве разделителя. Например, символ означает “один или несколько экземпляров следующих символов”.

В регулярном выражении есть 12 таких символов. Это: , , , , , , , , , , , . Вы можете увидеть их значение в регулярном выражении .

Если мы хотим разделить на один из этих символов, необходимо соблюдать особую осторожность, чтобы избежать этих символов в параметрах метода. Один из способов, которым мы можем это использовать, – использовать обратную косую черту

Например:

string.split("\\|");

Разделяет переменную на символ /. Мы используем здесь две обратные косые черты, так как нам нужно сначала избежать Java-значения обратной косой черты, чтобы обратную косую черту можно было применить к символу |.

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

string.split("");

Еще один способ избежать специальных символов-использовать :

string.split(Pattern.quote("|"));

Вывод

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

В этой статье мы рассмотрели, как разделять строки в Java.

Для преобразования и создания линейного списка — flatMap()

Результат работы flatMap() получается в два действия, на которые намекает само название метода. Эти слова и эти операции:

  • map (мы уже знаем, что это преобразование);
  • и flat — дословно «плоский».

Если применить обычный map() к стриму из списков List<AnyType>, то на выходе получим стрим из списков списков — List<List<NewType>>.

flatMap() позволяет получить «плоский» одномерный список — List<NewType>, в который будут последовательно добавлены преобразованные значения из всех списков, полученных после применения map().


map vs flatMap

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

Задача

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

Без лямбд

Чтобы получить список уникальных книг, мы создали Set (множество), последовательно прошлись по всем читателям и добавили их книги в это множество. Только после этого преобразовали множество в список (ArrayList).

С лямбдами

После применения flatMap() уже получаем стрим, состоящий из всех книг всех читателей, а distinct() отвечает за то, чтобы в этом стриме остались только уникальные значения.

Использование стрингутилов

Библиотеки Apache Commons добавляют некоторые полезные методы для управления основными типами Java. Apache Commons Lang предоставляет множество вспомогательных утилит для API java.lang, в первую очередь String методы манипулирования.

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

assertEquals("United States of America", 
  StringUtils.substringBetween(text, "(", ")"));

Существует упрощенная версия этого метода в случае, если подстрока вложена между двумя экземплярами одной и той же строки

substringBetween(String str, String tag)

Метод substringAfter из того же класса получает подстроку после первого вхождения разделителя.

Разделитель не возвращается:

assertEquals("the USA (United States of America).", 
  StringUtils.substringAfter(text, "living in "));

Аналогично, метод substringBefore получает подстроку перед первым вхождением разделителя.

Разделитель не возвращается:

assertEquals("Julia Evans", 
  StringUtils.substringBefore(text, " was born"));

Вы можете ознакомиться с этим руководством, чтобы узнать больше об обработке String с помощью API Apache Commons Lang.

Введите строку с помощью пользовательских методов

Класс 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();
}

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

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

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

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');

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector