☕ Учебник по Java: введение в класс String

Оттачиваем навык работы со строчками: создание, форматирование, конкатенация строк и самые часто используемые методы.
☕ Учебник по Java: введение в класс String

Класс String в Java

Строка (String) – объект, который содержит последовательность символов (char). Если взглянуть на реализацию данного класса, то можно увидеть такую картину:

        public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence
{
    /** Значение используется для хранения символов. */
    private final char value[];

    /** Смещение – первый индекс */
    private final int offset;

    /** Count – это количество символов в строке. */
    private final int count;

    /** Кэширование хэш-кода строки */
    private int hash; // Default to 0

    [...]
}
    

В данном коде представлена часть реализации класса String. Обращаем внимание на поле value – в данном массиве хранятся все данные.

Также String является финальным классом, то есть не имеет подклассов и об этом говорит ключевое слово final при объявлении класса.

☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»

Создание

Для того чтобы создать String, имеется 2 метода:

1. Строковые литералы

        String name = "Andrey"; // присвоение к переменной
System.out.println(name);
System.out.println("Ivanov") // использование без переменной
    

В данном примере для создания строки необходимые данные заключаются в двойные кавычки. Строка выводится на экран командой println() без присваивания значения переменной.

2. Конструктор new String()

        String name = "Andrey"; 
char[] nameCharsArray = {'A', 'n', 'd', 'r', 'e', 'y'};
String nameFromArray = new String(nameCharsArray);

System.out.println(name);
System.out.println(nameFromArray );
    

В примере выше для создания объекта используется конструктор String(). Массив символов (nameCharsArray) помещается как аргумент в конструктор String, который создает строку.

🧩☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»

Длина

У строки есть метод length, который возвращает int – длину строки.

        String name = "alexandr"; 
// проходимся по строке name
for(int i = 0; i < name.length(); i++) { 
	if (name.charAt(i) != 'a') { // если символ i в строке name не является 'a'
			System.out.print(name.charAt(i)); // то вывести данный символ
	} 
}
    

В примере выше написали программу, которая проходится по переменной name и выводит все cимволы кроме a.

Конкатенация

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

1. Метод concat

        String name = "Andrey";
String helloMessage = "Hello, ";

String helloMessageWithName = helloMessage.concat(name);
System.out.println(helloMessageWithName );
    

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

2. Перегруженные операторы "+" и "+="

Данный метод для конкатенации использует математические операторы + и +=. Пример использования:

        String message = "Hello, " + "Andrey!"; 
message += "/nGood to see you";
System.out.println(message);
    

В данном примере есть переменная message, к которой через конкатенацию присваивается значения “Hello” и “Andrey!”. Также на следующей строчке оператором += присваивается значение “/nGood to see you”. В случаях, когда слияние нужно провести только один раз, рекомендовано использовать операторы.

Форматирование

Класс String предоставляет статистический метод format, который дает возможность для форматирования строк:

        String message = "Hello, %s! /nGood to see you. Today's weather is %d degree Celcius."
System.out.println(String.format(message, "Andrey", 35))
    

Метод format предоставляет возможность для вставки и редактирования строки. Как видно на примере, имеется переменная message, содержащая сообщение. В сообщении находятся специальные символы:

  • %s – означает строку.
  • %d – означает целое число.
  • %f – означает вещественное число.

Методы

Класс String предоставляет множество методов управления строкой и его символами. Подробное описание методов можно найти, перейдя по данной ссылке.

Преобразование

1. Число в строку

        int degreeInCelcius = 35;
String firstMethod = degreeInCelcius + ""; // конкатенация со строкой
String secondMethod = String.valueOf(degreeInCelcius); // использования метода valueOf()
String thirdMethod = Interger.toString(degreeInCelcius); // использование метода toString()
    

2. Строку в число

        String degreeInCelcius = "35";
int firstMethod = Interger.parseInt(degreeInCelcius); // использование метода parseInt()
int secondMethod = Interger.valueOf(degreeInCelcius); // использование метода valueOf()
    

StringBuffer

Строки являются неизменными, поэтому частая их модификация приводит к созданию новых объектов, что, в свою очередь, расходует память. Для решения этой проблемы был создан класс java.lang.StringBuffer, который позволяет более эффективно работать над модификацией строки. Класс является mutable, то есть изменяемым. StringBuffer используется в многопоточных средах, так как все необходимые методы являются синхронизированными.

Создание

Существует четыре способа создания объекта класса StringBuffer. Каждый объект имеет свою вместимость (capacity), отвечающую за длину внутреннего буфера. Если длина строки, хранящейся во внутреннем буфере, не превышает размер этого буфера (capacity), то нет необходимости выделять новый массив буфера. Если же буфер переполняется – он автоматически становится больше.

        StringBuffer firstBuffer = new StringBuffer(); // capacity = 16
StringBuffer secondBuffer = new StringBuffer("habrahabr"); // capacity = str.length() + 16
StringBuffer thirdBuffer = new StringBuffer(secondBuffer); // параметр - любой класс, что реализует CharSequence
StringBuffer fourthBuffer = new StringBuffer(50); // передаем capacity
    

Модификация

В большинстве случаев StringBuffer используется для многократного выполнения операций добавления (append), вставки (insert) и удаления (delete) подстрок. Например:

        String name = "Andrey";
String surName = "Andreyev";
StringBuffer buffer = new StringBuffer();
buffer.append(name + " "); // добавляем имя вместе с пробелом
buffer.append(surName); // добавляем фамилие
buffer.delete(buffer.length() - surName.length(), buffer.length()); // удаляем фамилие
// buffer.delete([стартовый индекс], [индекс конечного символа])

buffer.insert(buffer.length(), surName); // вставляем строку по определенному индексу
// buffer.insert([с какого индекса вставить], [cтрока])

    

StringBuilder

StringBuilder – класс, предоставляющий изменяемую последовательность символов. Класс был введен в Java 5 и имеет полностью идентичный API с StringBuffer. Единственное отличие – StringBuilder не синхронизирован. Это означает, что его нежелательно использовать в многопоточных средах. Следовательно, для работы с многопоточностью идеально подходит StringBuffer. Пример использования:

        // Создаем StringBuilder объект
// используя StringBuilder() конструктор
StringBuilder str = new StringBuilder();
str.append("Andrey");
// выводим как string
System.out.println("String = " + str1.toString());

// Создаем StringBuilder объект
// используя StringBuilder(CharSequence) конструктор
StringBuilder str1
    = new StringBuilder("Andreyev");

// выводим как string
System.out.println("String1 = " + str1.toString());

// Создаем StringBuilder объект
// using StringBuilder(capacity) конструктор
StringBuilder str2 = new StringBuilder(10);

// выводим вмещаемость
System.out.println("String2 capacity = "
                   + str2.capacity());

// Создаем StringBuilder объект
// uспользуя StringBuilder(String) конструктор
StringBuilder str3
    = new StringBuilder(str1.toString());

// выводим как string
System.out.println("String3 = " + str3.toString());
    

Сравнение строк

Для сравнения строк используются методы:

  • equals(), с учетом регистра
  • equalsIgnoreCase(), без учета регистра

Оба метода в качестве параметра принимают строку, с которой надо сравнить:

        String str1 = "Hello";
String str2 = "hello";
         
System.out.println(str1.equals(str2)); 
// false - в данном примере происходит сравнение строк с учетом регистра
System.out.println(str1.equalsIgnoreCase(str2)); 
// true - в данном примере сравнение происходит без учета регистра
    

Разбиение строки на массив строк

Для деления строки у класса java.lang.String существует метод split, который в аргументе принимает символ — разделитель строки.

        String str = "Строка для деления методом split";
String[] arrStrings = str.split(" "); // делим строку 
System.out.println(Arrays.toString(arrStrings));

/*
Вывод
[Строка, для, деления, методом, split]
*/
    

Определение позиции элемента в строке

Метод indexOf() ищет в строке заданный символ или строку и возвращает индекс (т. е. порядковый номер).

Метод:

  • возвращает индекс, под которым символ или строка первый раз появляется в строке;
  • возвращает (-1), если символ или строка не найдены.

Метод также может искать символ или строку, начиная с указанного индекса.

        String hello = "Hello";
int index1 = hello.indexOf('H');
int index2 = hello.indexOf('o');
int index3 = hello.indexOf('W');
System.out.println("Мы ищем букву 'H' в строке "+hello+". Индекс данной буквы "+index1 );
System.out.println("Мы ищем букву 'o' в строке "+hello+". Индекс данной буквы "+index2 );
System.out.println("Мы ищем букву 'W' в строке "+hello+". Индекс данной буквы "+index3 );
    

Извлечение подстроки из строки

Метод substring() в Java возвращает новую строку, которая является подстрокой данной строки. Подстрока начинается с символа, заданного индексом, и продолжается до конца данной строки или до endIndex-1, если введен второй аргумент.

        // строка.substring(откуда отрезать, докуда отрезать)

String Str = new String("Добро пожаловать на proglib.io");

System.out.print("Возвращаемое значение: ");
System.out.println(Str.substring(5));

System.out.print("Возвращаемое значение: ");
System.out.println(Str.substring(5, 15));

/*
Возвращаемое значение:  пожаловать на proglib.io
Возвращаемое значение:  пожаловат
*/
    

Перевод строки в верхний/нижний регистр

Преобразовать текстовые строки Java в верхний или нижний регистр довольно просто: для этого используйте встроенные методы Java – toUpperCase и toLowerCase. Подробнее с примером.

        String changeCase = "Текст, Который Будет Изменяться";
System.out.println(changeCase);

String result;
result = changeCase.toUpperCase(); // строка переводится в верхний регистр
System.out.println(result);

result = changeCase.toLowerCase(); // строка переводится в нижний регистр
System.out.println(result);
    

Перевод коллекции строк к строковому представлению

Чтобы соединить строки в Java, используется метод String.join(). Разделитель, заданный в качестве первого параметра в методе, копируется для каждого элемента. Допустим, нужно объединить строки «Demo» и «Text». Для этого используется метод join(), как показано ниже:

        String str = String.join("$","Demo","Text"); // разделителем является $
System.out.println("Joined strings: "+str);

/*
Joined strings: Demo$Text
*/
    
***

Материалы по теме

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Go-разработчик
по итогам собеседования
Java Team Lead
Москва, по итогам собеседования
Senior Java Developer
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ