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

Днес ще говорим за Stringкласа. След ints, класът String е най-популярният клас в Java. Използва се абсолютно навсякъде. Той има куп полезни методи, които е по-добре да знаете.

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

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

Масив от знаци

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

Структура на класа String
важно!

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


2. Методи на 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()
Поставя низ в string pool.

Можете да научите повече за конструкторите в статията Конструктори на Java .

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

Решение 1: използване на масив от символи

Код Бележки
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);
Създайте обект на скенер
Прочетете ред от конзолата

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