JavaRush /Java блог /Random UA /Клас String в Java

Клас String в Java

Стаття з групи Random UA
Клас String Java призначений для роботи з рядками Java. Всі рядкові літерали, визначені в програмі Java (наприклад, "abc") - це екземпляри класу String. Давай подивимося на його ключові характеристики:
  1. Клас реалізує інтерфейси Serializableта CharSequence. Оскільки він входить до пакета java.lang, його не потрібно імпортувати.
  2. Клас String в Java - це final клас, який може мати нащадків.
  3. Клас String – immutable клас, тобто його об'єкти не можуть бути змінені після створення. Будь-які операції над об'єктом String, результатом яких має бути об'єкт класу String, призведуть до створення нового об'єкта.
  4. Завдяки своїй незмінності об'єкти класу String є потокобезпечними і можуть бути використані в багатопотоковому середовищі.
  5. Кожен об'єкт Java може бути перетворений на рядок через метод toString, успадкований всіма Java-класами від класу Object.
Клас String в Java - 1

Робота з Java String

Це один з найчастіше використовуваних класів Java. У ньому є методи для аналізу певних символів рядка, для порівняння та пошуку рядків, вилучення підрядків, створення копії рядка з переведенням всіх символів у нижній та верхній регістр та інші. Список всіх методів класу String можна вивчити в офіційній документації . Також Java реалізований нескладний механізм конкатенації (з'єднання рядків), перетворення примітивів у рядок і навпаки. Давай розглянемо деякі приклади роботи з класом String Java.

Створення рядків

Найпростіше створити екземпляр класу String, надавши йому значення рядкового літералу:
String s = "I love movies";
Однак у класу String є багато конструкторів , які дозволяють:
  • створити об'єкт, що містить порожній рядок
  • створити копію рядкової змінної
  • створити рядок на основі масиву символів
  • створити рядок на основі масиву байтів (з урахуванням кодувань)
  • і т.д.

Складання рядків

Скласти два рядки Java досить просто, скориставшись оператором +. Java дозволяє складати один з одним і змінні, і рядкові літерали:
public static void main(String[] args) {
    String day = "День";
    String and = "і";
    String night = "Ніч";

    String dayAndNight = day + " " + and + " " + night;
}
Складаючи об'єкти класу String з іншими класами, ми наводимо останні до рядкового виду. Перетворення об'єктів інших класів до рядкового подання виконується через неявний виклик методу toStringоб'єкта. Продемонструємо це на наступному прикладі:
public class StringExamples {
    public static void main(String[] args) {
        Human max = new Human("Макс");
        String out = "Java об'єкт: " + max;
        System.out.println(out);
        // Висновок: Java об'єкт: Людина з ім'ям Макс
    }

    static class Human {
        private String name;

        public Human(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Людина з ім'ям" + name;
        }
    }
}

Порівняння рядків

Для порівняння рядків можна скористатися методом equals():
public static void main(String[] args) {
    String x = "Test String";
    System.out.println("Test String".equals(x)); // true
}
Коли при порівнянні рядків нам не важливий регістр, потрібно використовувати метод equalsIgnoreCase():
public static void main(String[] args) {
       String x = "Test String";
       System.out.println("test string".equalsIgnoreCase(x)); // true
}

Переведення об'єкта/примітиву до рядка

Для перекладу екземпляра будь-якого Java-класу або будь-якого примітивного типу даних до рядкового подання можна використовувати метод String.valueOf():
public class StringExamples {
    public static void main(String[] args) {
        String a = String.valueOf(1);
        String b = String.valueOf(12.0D);
        String c = String.valueOf(123.4F);
        String d = String.valueOf(123456L);
        String s = String.valueOf(true);
        String human = String.valueOf(new Human("Alex"));

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(s);
        System.out.println(human);
        /*
        Висновок:
        1
        12.0
        123.4
        123456
        true
        Людина з ім'ям Alex
         */
    }

    static class Human {
        private String name;

        public Human(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Людина з ім'ям" + name;
        }
    }
}

Переведення рядка до числа

Часто буває потрібно перевести рядок у число. У класів обгорток примітивних типів є методи, які служать саме для цієї мети. Усі ці методи починаються зі слова parse. Розглянемо нижче переклад рядка в цілочислове ( Integer) та дробове ( Double) числа:
public static void main(String[] args) {
    Integer i = Integer.parseInt("12");
    Double d = Double.parseDouble("12.65D");

    System.out.println(i); // 12
    System.out.println(d); // 12.65
}

Переклад колекції рядків до рядкового подання

Якщо потрібно перетворити всі елементи деякої колекції рядків до рядкового подання через довільний роздільник, можна використовувати такі методи класу String Java:
  • join(CharSequence delimiter, CharSequence... elements)
  • join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
Де delimiter– роздільник елементів, а elements– масив рядків / екземпляр колекції рядків. Розглянемо приклад, у якому ми перетворимо список рядків у рядок, розділяючи кожну крапку з комою:
public static void main(String[] args) {
    List<String> people = Arrays.asList(
            "Philip J. Fry",
            "Turanga Leela",
            "Bender Bending Rodriguez",
            "Hubert Farnsworth",
            "Hermes Conrad",
            "John D. Zoidberg",
            "Amy Wong"
    );

    String peopleString = String.join("; ", people);
    System.out.println(peopleString);
    / *
    Висновок:
    Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong
     */
}

Розбиття рядка на масив рядків

Цю операцію виконує метод split(String regex) Як роздільник виступає рядкове регулярне вираз regex. У прикладі нижче зробимо операцію, обернену до тієї, що ми виконували в попередньому прикладі:
public static void main(String[] args) {
    String people = "Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong";

    String[] peopleArray = people.split("; ");
    for (String human : peopleArray) {
        System.out.println(human);
    }
    
    / *
    Висновок:
    Philip J. Fry
    Turanga Leela
    Bender
    Bending Rodriguez
    Hubert
    Farnsworth
     Hermes
}

Визначення позиції елемента у рядку

У мові Java String надає набір методів визначення позиції символу/подстроки в рядку:
  1. indexOf(int ch)
  2. indexOf(int ch, int fromIndex)
  3. indexOf(String str)
  4. indexOf(String str, int fromIndex)
  5. lastIndexOf(int ch)
  6. lastIndexOf(int ch, int fromIndex)
  7. lastIndexOf(String str)
  8. lastIndexOf(String str, int fromIndex)
Де:
  1. ch- Шуканий символ ( char)
  2. str- Шуканий рядок
  3. fromIndex- позиція з якою потрібно шукати елемент
  4. методи indexOf– повертають позицію першого знайденого елемента
  5. методи lastIndexOf– повертають позицію останнього знайденого елемента
Якщо елемент не знайдено, методи повернуть у рядку -1. Спробуємо знайти порядковий номер букв A, K, Z, Яв англійському алфавіті, але матимемо на увазі, що індексація символів у рядку Java починається з нуля:
public static void main(String[] args) {
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    System.out.println(alphabet.indexOf('A')); // 0
    System.out.println(alphabet.indexOf('K')); // 10
    System.out.println(alphabet.indexOf('Z')); // 25
    System.out.println(alphabet.indexOf('Я')); // -1
}

Вилучення підрядка з рядка

Для вилучення підрядки з рядка клас String Java надає методи:
  • substring(int beginIndex)
  • substring(int beginIndex, int endIndex)
Розглянемо, як за допомогою методів визначення позиції елемента та вилучення підрядка ми можемо отримати ім'я файлу з його шляху:
public static void main(String[] args) {
    String filePath = "D:\\Movies\\Futurama.mp4";
    int lastFileSeparatorIndex = filePath.lastIndexOf('\\');
    String fileName = filePath.substring(lastFileSeparatorIndex + 1);
    System.out.println(fileName); //9
}

Переведення рядка у верхній/нижній регістр:

Клас String надає методи для переведення рядка у верхній та нижній регістри:
  • toLowerCase()
  • toUpperCase()
Розглянемо роботу даних методів з прикладу:
public static void main(String[] args) {
    String fry = "Philip J. Fry";

    String lowerCaseFry = fry.toLowerCase();
    String upperCaseFry = fry.toUpperCase();

    System.out.println(lowerCaseFry); // philip j. fry
    System.out.println(upperCaseFry); // PHILIP J. FRY
}
Робота з цим класом Java вивчається на початкових рівнях онлайн-курсу JavaRush:

Додаткові джерела

Інформація про клас String також наводиться в інших статтях JavaRush:
  1. Рядки в Java - стаття розкриває деякі основи роботи з рядками в Java.
  2. Java String. Питання до співбесіди та відповіді на них, ч.1 — у цій статті розглядаються питання до співбесіди на тему String, а також даються відповіді на запитання з поясненнями та прикладами коду.
  3. Рядки в Java (class java.lang.String) - у цій статті наводиться більш глибокий аналіз класу String, а також розглядаються тонкощі роботи з цим класом.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ