undefined

Перечисляю все классы, связанные со строками, и говорю, что делают они и все методы

Java Multithreading
2 уровень , 2 лекция
Открыта

— Привет, Амиго!

— Так ведь уже здоровались, Билаабо.

— Да? Но мне все равно приятно начинать каждый урок с этой фразы.

Сегодня мы плотно займемся классом String.

— Так я там уже все знаю. Даже то, что String – immutable.

— У класса String 46 методов, сколько из них знаешь ты?

— Не больше десятка. Даже, наверное, максимум штук 5.

— Тогда слушай.

Разработчики Java заметили, что в большинстве своем строки внутри программ существуют в неизменяемом виде, но иногда их все-таки изменяют. Очень неприятно, когда вы создали строку, сохранили в нее что-то важное, передали в чужой метод, а он ее поменял. Чтобы такого не происходило, разработчики решили создать два вида строк – изменяемую и неизменяемую.

— Класс String стал отвечать за неизменяемую строку, а класс StringBuilder – за изменяемую. Объекты этих классов легко преобразуются друг в друга. В большинстве случаев разработчикам программ на Java достаточно просто String, что показывает, что проектировщики Java были правы.

— Т.е. если мне нужна строка – я создаю класс String, а если нужна изменяемая строка – то класс StringBuilder

— Да. На самом деле есть еще класс StringBuffer – это копия StringBuilder, но все методы которого объявлены synchronized, для того, чтобы к объекту можно было обращаться из разных нитей программы.

— А как же такой пример? Разве тут строка не изменяется?

String s = "cat";
s = s + "-" + s;

— Нет. Тут есть два объекта String: «cat»и «cat-cat». Второй создается на основе первого, но первый объект не меняется. На самом деле тут все еще интереснее. Вот какой код сгенерирует компилятор, когда будет компилировать твой пример:

String s = "cat";
StringBuilder s2 = new StringBuilder(s);
s2.append("-");
s2.append(s);
s = s2.toString();

Т.е. для создания новой строки практически всегда используется StringBuilder, просто иногда всю работу за тебя делает компилятор. Но ведь твой вариант проще, разве нет?

— Да, классно, что в Java такой продвинутый компилятор.

— А теперь пройдемся по методам класса String:

1) Как узнать длину строки?

Метод length возвращает длину строки – количество в ней символов.

Метод(ы) Пример(ы)
int length();
String s = "Good news everyone!";
int n = s.length();
int n = "Good news everyone!".length();

2) Как получить символ из строки?

Метод charAt возвращает символ строки по его номеру. Нумерация символов начинается с 0.

Метод(ы) Пример(ы)
char charAt(int index)
String s = "Good news everyone!";
char n = s.charAt(5);
char n = "Good news everyone!".charAt(5);

3) Как получить символы из строки?

Метод toCharArray возвращает массив всех символов строки.

Метод(ы) Пример(ы)
char[] toCharArray()
String s = "Good news everyone!";
for(char c : s.toCharArray())
{
System.out.println(c);
}

4) Как сравнить строки?

Метод equals проверяет, совпадают ли строки, а метод equalsIgnoreCase — совпадают ли строки, игнорируя регистр букв.

Метод(ы) Пример(ы)
boolean equals(Object o)
String s = "cat";
boolean test1 = s.equals("cat");//true
boolean test2 = s.equals("Cat");//false
boolean test3 = s.equals("c"+"a"+"t");//true
boolean equalsIgnoreCase(String str)
String s = "cat";
boolean test1 = s.equalsIgnoreCase("cat");//true
boolean test2 = s.equalsIgnoreCase("Cat");//true
boolean test3 = s.equalsIgnoreCase("cAT");//true

5) Как превратить все буквы в строке в большие или маленькие?

Метод toUpperCase возвращает копию строки, все символы которой – большие.

Метод toLowerCase возвращает копию строки, все символы которой – маленькие.

Метод(ы) Пример(ы)
String toUpperCase()
String s = "Good news everyone!";
s = s.toUpperCase();
Результат:

s == "GOOD NEWS EVERYONE!";
String toLowerCase()
String s = "Good news everyone!";
s = s.toLowerCase();
Результат:

s == "good news everyone!";

6) Как убрать пробелы в начале и в конце строки?

Метод trim возвращает копию строки, без «пустых» символов в начале и конце.

Метод(ы) Пример(ы)
String trim()
String s = "  Good news everyone!   ";
s = s.trim();
Результат:

s == "Good news everyone!";
Комментарии (78)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Валерий Федотовских 40 уровень, Москва
14 марта 2021
Не понял из примера, как это строка неизменяемая (immutable), если в конце мы ее заменили на другую (s2). Как эта "неизменяемость" тогда проявляется и в чем её смысл?
Игорь 28 уровень, Братск
25 января 2021
Кстати эти методы можно написать самому, если знать, что строка заканчивается '\0'. Есть ещё ASC2, где все буквы по порядку abcd или ABCD.
Alena 26 уровень, Halifax
17 декабря 2020
методы класса String, среди которых можно выделить следующие: concat(): объединяет строки valueOf(): преобразует объект в строковый вид join(): соединяет строки с учетом разделителя сompare(): сравнивает две строки charAt(): возвращает символ строки по индексу getChars(): возвращает группу символов equals(): сравнивает строки с учетом регистра equalsIgnoreCase(): сравнивает строки без учета регистра regionMatches(): сравнивает подстроки в строках indexOf(): находит индекс первого вхождения подстроки в строку lastIndexOf(): находит индекс последнего вхождения подстроки в строку startsWith(): определяет, начинается ли строка с подстроки endsWith(): определяет, заканчивается ли строка на определенную подстроку replace(): заменяет в строке одну подстроку на другую trim(): удаляет начальные и конечные пробелы substring(): возвращает подстроку, начиная с определенного индекса до конца или до определенного индекса toLowerCase(): переводит все символы строки в нижний регистр toUpperCase(): переводит все символы строки в верхний регистр
alex_us 41 уровень, Симферополь
2 декабря 2020
Главный девиз ДЖАВАРАШ - своеременность наше все
Алина Подгорнова 28 уровень, Москва
29 октября 2020
А по-моему, огонь! Мы и так уже знали эти методы, гуглили и применяли интуитивно. А эта статья систематизирует наши знания. Если бы она была раньше, то меньше инфы было бы усвоено, потому что no pain - no gain. И еще так приятно читать и осознавать, что ты это уже знаешь! Наглядно ощущаешь результаты. Часто бывает, что учишь-учишь, а кажется, что нифига не сделал.
Ivan 32 уровень, Новосибирск
23 сентября 2020
Как же вовремя эти повторялки для меня. Перерыв в обучении больше двух месяцев. Да и упорядочилась вся инфа для понимания. Кстати, кто перешёл после CORE на Multitreading сразу и почему? Есть кто после Collections?
Andrey Karelin 25 уровень, Sumy
15 сентября 2020
Просто издеваются. когда прошли 20 уровней, и проюзали String вдольи поперек всеми мыслимыми и немыслимыми методами... "...а теперь мы познакомися со String" )) на 41м уровне будем int изучать ?
MrDivare 25 уровень
13 августа 2020
С не терпением ждем лекции о примитивных типах, ей тут самое место.
Igor Chubenko 25 уровень, Черкассы
16 июня 2020
Да, как-то запоздалая лекция - ее бы в списке самых первых в блоке "Java Syntax" разместить. Хорошо, когда попутно читаешь книги и разные статьи, где это все, обычно, разжовывается с самого начала
Арутюн 29 уровень
3 июня 2020
В первую очередь, курс учит нас пользоваться поиском, что так же является немаловажным, в процессе обучения.