Методы класса String, появившиеся в Java 11

1. Введение
В Java 11 добавили несколько полезных методов в классе String. В этой небольшой статье мы разберем их и попробуем с ними работать.
2. repeat()
Как следует из названия, метод repeat() повторяет n раз (где n передается в качестве параметра) содержимое строки, а затем возвращает сконкатенированный результат:

package ru.topjava.string;

public class StringRepeat {

    public static void main(String[] args) {
        String strRepeat = "Knock ".repeat(2);

        System.out.println(strRepeat); // "Knock Knock "
        System.out.println(strRepeat.equals("Knock Knock ")); // true
    }
}
Если в качестве аргумента передать отрицательное число, например -1, то будет выброшено исключение java.lang.IllegalArgumentException: count is negative: -1
Помимо этого, repeat() возвращает пустую строку, если значение исходной строки, которую нужно повторить, так же является пустой строкой или число повторений равно нулю.
3. strip()
Метод strip() возвращает строку со всеми удаленными начальными и конечными пробелами:

package ru.topjava.string;

public class StringStrip {

    public static void main(String[] args) {
        String strStrip = "\u2006  java \n \t".strip();

        System.out.println(strStrip); // "java"
        System.out.println(strStrip.equals("java")); // true
    }
}
В Java 11 также были добавлены методы stripLeading() и stripTrailing(), которые обрабатывают начальные и конечные пробелы соответственно.
3.1. Различия между strip() и trim()
strip() определяет, является ли символ пробелом или нет, основываясь на Character.isWhitespace(). Другими словами, он знает о разных пробельных символах Unicode. Это отличает его от trim(), который определяет пробел, как любой символ, который меньше или равен пробелу из Unicode (U+0020).
Давайте применим trim() к предыдущему примеру. Результат будет другим:

package ru.topjava.string;

public class StringTrim {

    public static void main(String[] args) {
        String strTrim = "\u2006  java \n \t".trim();

        System.out.println(strTrim); // "   java"
        System.out.println(strTrim.equals("java")); // false
    }
}
Обратите внимание, как trim() обрезал начальные пробелы, но не смог убрать конечные. Это связано с тем, что trim() не знает о пробельных символах Unicode, которые имеют код больше U+0020.
4. isBlank()
Метод экземпляра isBlank() возвращает true, если строка пуста или содержит только пробелы, иначе — false:

package ru.topjava.string;

public class StringIsBlank {

    public static void main(String[] args) {
        String strIsBlank = "\u2006   \n \t";
        String strEmpty = "";

        System.out.println(strIsBlank.isBlank()); // true
        System.out.println(strEmpty.isBlank());   // true
    }
}
Метод isBlank() распознает пробельные символы Unicode, как и strip().
5. lines()
Метод lines() возвращает Stream строк, извлеченных из исходной строки, разделенных ограничителями:

package ru.topjava.string;

public class StringLines {

    public static void main(String[] args) {
        String str = "Write \n once, \nrun anywhere\n (WORA)";
        str.lines().map(String::strip).forEach(System.out::println);
    }
}
В консоль будут выведены четыре строки без пробелов и ограничителей строк:
Под ограничителями строк понимаются следующие последовательности: «\n», «\r», or «\r\n».
В потоке строки располагаются в порядке их появления. Ограничители строк, а так же пробелы удаляются из каждой строки.
Этот метод более предпочтителен, чем split(), поскольку он обеспечивает лучшую производительность.
6. Заключение
В этой статье мы рассмотрели новый String API, появившийся в Java 11.
Оригинал статьи «Java 11 String API Additions»
Оцените статью, если она вам понравилась!