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

Обновления строкового API в Java 12

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

1. Введение

Java 12 добавила пару полезных API в класс String . В этом руководстве мы рассмотрим эти новые API на примерах.

2. отступ()

Метод indent() регулирует отступ каждой строки строки на основе переданного ему аргумента.

Когда indent() вызывается для строки, выполняются следующие действия:

  1. Строка концептуально разделена на строки с помощью lines() . lines() — это String API, представленный в Java 11 .

  2. Затем каждая строка корректируется на основе переданного ей аргумента int n , а затем добавляется суффикс перевода строки «\n».

  3. Если n > 0, то в начале каждой строки вставляется n пробелов.

  4. Если n < 0, то с начала каждой строки удаляется до n пробелов. Если данная строка не содержит достаточного количества пробелов, все начальные пробелы удаляются.

  5. Если n == 0, то строка остается неизменной. Однако терминаторы строк по-прежнему нормализованы.

  6. Полученные строки затем объединяются и возвращаются.

Например:

@Test
public void whenPositiveArgument_thenReturnIndentedString() {
String multilineStr = "This is\na multiline\nstring.";
String outputStr = " This is\n a multiline\n string.\n";

String postIndent = multilineStr.indent(3);

assertThat(postIndent, equalTo(outputStr));
}

Мы также можем передать отрицательное значение int , чтобы уменьшить отступ строки. Например:

@Test
public void whenNegativeArgument_thenReturnReducedIndentedString() {
String multilineStr = " This is\n a multiline\n string.";
String outputStr = " This is\n a multiline\n string.\n";

String postIndent = multilineStr.indent(-2);

assertThat(postIndent, equalTo(outputStr));
}

3. трансформировать()

Мы можем применить функцию к этой строке, используя метод transform() . Функция должна ожидать один аргумент String и выдавать результат:

@Test
public void whenTransformUsingLamda_thenReturnTransformedString() {
String result = "hello".transform(input -> input + " world!");

assertThat(result, equalTo("hello world!"));
}

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

@Test
public void whenTransformUsingParseInt_thenReturnInt() {
int result = "42".transform(Integer::parseInt);

assertThat(result, equalTo(42));
}

4. Вывод

В этой статье мы рассмотрели новые API-интерфейсы String в Java 12. Как обычно, фрагменты кода можно найти на GitHub .