"Какво мислиш, Амиго? Кой е най-популярният Java клас след int?"

„Вече ми даде спойлер в заглавието на урока, Ели. Това е String!“

„Наистина, това е спойлер. StringИзползва се абсолютно навсякъде. Има куп полезни методи, които е по-добре да знаете.

StringКласът е единственият клас, различен от примитивните типове, чиито литерали могат да се използват в израз switch; компилаторът обработва добавянето на низове и String обектите по специален начин; Stringобектите се съхраняват в паметта по специален начин. По принцип класът Stringе много специален клас.

„Също така Stringкласът има куп помощни класове, чиято цел е допълнително да опростят работата с низове в Java. Когато научите всичко това, много неща наистина ще станат много по-лесни за вас.“

— Нямам търпение.

„Е, ще започнем от самото ядро ​​на тази екосистема — организацията на класа String. Структурата на Stringкласа всъщност е много проста: вътре в него има масив от знаци ( charмасив), който съхранява всички знаци на низа. например, ето How се съхранява думата „Здравей“:

Структура на класа String

Важно е.

Всъщност това не е съвсем точно. Тъй като Stringкласът е много важен, той използва много оптимизации и данните се съхраняват вътрешно не като масив от знаци, а просто като масив от byteове.

Методи на класа String

Класът Stringима много методи: има само 18 конструктора! И така, по-долу ще изброя само най-често използваните:

Методи Описание
int length()
Връща броя знаци в низа
boolean isEmpty()
Проверява дали низът е празен низ
boolean isBlank()
Проверява дали низът съдържа само празни знаци: интервал, раздел, нов ред и т.н.
char charAt(int index)
Връща знака в позицията на индекса в низа.
char[] toCharArray()
Връща масив от знаци (копие), които съставят низа
byte[] getBytes()
Преобразува низ в набор от byteове и връща масива от byteове.
String[] split(String regex)
Разделя низ на множество поднизове.
String join(CharSequence delimiter, elements)
Съединява множество поднизове заедно
String intern()
Поставя низ в набора от низове.

— Това изглежда много добре!

„Нека напишем програма, която преобразува файлов път от Unix стил в стил Windows. Unix използва знака /за разделяне на папки, докато Windows използва \знака.

Решение 1. Използване на charмасив

Код Бележки
Scanner console = new Scanner(System.in);
String path = console.nextLine();

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
Създайте обект на скенер
Прочетете ред от конзолата

Преобразувайте низ в масив от знаци
Превъртете символите
Ако знакът е /,
заменете го с \. Не забравяйте за бягството.

Създайте нов низ въз основа на масива от знаци.
Покажете низа.

Решение 2. Използване на методите split()и join():

Код Бележки
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String array[] = path.split("\\/");


String result = String.join("\\", array);


System.out.println(result);
Създайте обект на скенер
Прочетете ред от конзолата

Преобразувайте низ в масив от низове . Символът /се използва като разделител (допълнителните две наклонени черти са резултат от двойно екраниране).
Свържете всички низове в масива от низове . Използва се \като разделител (виждаме го екранирано).

Покажете низа.

Решение 3. Използване на replace(char oldChar, char newChar)метода:

Код Бележки
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String result = path.replace('/', '\\');

System.out.println(result);
Създайте обект на скенер
Прочетете ред от конзолата

Просто заменете един знак с друг
(вторият е екраниран)
Покажете низа.

„Най-много ми хареса третото решение. Но ще упражня и трите.“

"Браво, Амиго. Виждам, че вече нямаш търпение да приложиш новите си знания на практика. Урокът приключи."