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

Символьные строки

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

String е = ""; // пустая строка
String greeting = "Hello";

По существу, символьная строка Java представляет собой последовательность символов (тип данных char).

Подстроки​

С помощью метода substring() из класса String можно выделить подстроку из отдельной символьной строки. Например, в результате выполнения приведенного ниже фрагмента кода формируется подстрока "Неl".

String greetiпg = "Hello";
String s = greeting.substring(0, 3);

Второй параметр метода substring() обозначает позицию символа, который не следует включать в состав подстроки. В данном примере требуется скопировать символы на трех позициях, 0, 1 и 2 (т.е. от позиции 0 до позиции 2 включительно), поэтому при вызове метода substring() указываются значения 0 и 3, обозначающие копируемые символы от позиции 0 и до позиции 2 включительно, но исключая позицию 3.

Сцепление строк​

В языке Java, как и в большинстве других языков программирования, предоставляется возможность объединить две символьные строки, используя знак + операции сцепления.

String expletive = "Expletive";
String PG13 = "deleted";
String message = expletive + PG13;

В приведенном выше фрагменте кода переменной message присваивается символьная строка "Expletivedeleted", сцепленная из двух исходных строк. (Обратите внимание на отсутствие пробела между словами в этой строке. Знак + операции сцепления соединяет две строки точно в том порядке, в каком они были заданы в качестве операндов.)

При сцеплении символьной строки со значением, не являющимся строковым, это значение преобразуется в строковое. В приведенном ниже примере кода переменной rating присваивается символьная строка "PGlЗ", полученная путем сцепления символьной строки с числовым значением, автоматически преобразуемым в строковое.

int age = 13;
String rating = "PG" + age;

Если требуется соединить вместе две символьные строки, разделяемые каким-нибудь знаком, то для этой цели можно воспользоваться статическим методом join(), как показано ниже.

String all = String.join(" / ", "S", "М", "L", "XL"); // в итоге переменная all содержит строку "S / М / L / XL"

В версии 11 появился метод repeat(), позволяющий повторять сколько требуется заданную символьную строку:

String repeated = "Java".repeat(3); // повторить строку "Java", чтобы
// получить в итоге строку "JavaJavaJava"

Принцип постоянства символьных строк​

В классе String отсутствуют методы, которые позволяли бы изменять символы в существующей строке. Так, если требуется заменить символьную строку в переменной greeting с "Hello" на "Help!", этого нельзя добиться одной лишь заменой двух последних символов. В языке Java можно внести необходимые изменения в строку, выполнив сцепление подстроки, которую требуется сохранить, с заменяющими символами, как показано ниже. В итоге переменной greeting присваивается символьная строка "Help!".

greeting = greeting.substring(O, 3) + "р!";

Проверка символьных строк на равенство​

Чтобы проверить две символьные строки на равенство, достаточно вызвать метод equals(). Так, выражение s.equals(t) возвращает логическое значение true, если символьные строки s и t равны, а иначе - логическое значение false. Следует, однако, иметь в виду, что в качестве s и t могут быть использованы строковые переменные или константы. Например, следующее выражение вполне допустимо:

"Hello!".equals(greeting);

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

"Hello".equalsIgnoreCase("hello");

Для проверки символьных строк на равенство нельзя применять операцию ==. Она лишь определяет, хранятся ли обе строки в одной и той же области памяти. Разумеется, если обе строки хранятся в одном и том же месте, они должны совпадать. Но вполне возможна ситуация, когда одинаковые символьные строки хранятся в разных местах. Ниже приведен соответствующий пример.

String greeting = "Hello"; // инициализировать переменную greeting
// символьной строкой "Hello"
if (greeting == "Hello") ...
// возможно, это условие истинно
if (greeting.substring(O, 3) == "Hel")
// возможно, это условие ложно

Построение символьных строк​

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

Если требуется создать символьную строку из нескольких небольших фрагментов, сконструируйте сначала пустой объект в качестве построителя символьной строки:

StringBuilder builder = new StringBuilder();

Когда же потребуется добавить новый фрагмент в символьную строку, вызовите метод append(), как показано ниже.

builder.append(ch);  // добавить единственный символ
builder.append(str); // добавить символьную строку

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

String completedString = builder.toString();