Фрагмент от лекция с ментор като част от курса на Codegym University. Запишете се за пълния курс.
"Здравей, Амиго! Днес ще анализираме няколко по-често срещани сценария, включващи работа с низове. Например, знаеш ли How да разделиш низ на няколко части?"
„Няма да ти кажа веднага, Ели. Но ти ще ми кажеш, нали?“
split()
метод
"Има няколко начина да направите това. Първият начин да разделите низ на множество части е да използвате метода split()
. Регулярен израз, който дефинира специален разделителен низ, трябва да бъде предаден като параметър. Ще научите Howво е регулярен израз в търсенето на Java Collections .
Пример:
Код | Резултат |
---|---|
|
Резултатът ще бъде масив от три низа:
|
Просто, но понякога този подход е прекален. Ако има много разделители (например интервали, знаци за нов ред, раздели, точки), тогава трябва да конструирате доста сложен регулярен израз."
„Е, разбира се. И ако е трудно за четене, тогава е трудно да се правят промени.
StringTokenizer
клас
Фрагмент от лекция с ментор като част от курса на Codegym University. Запишете се за пълния курс.
„Java има специален клас, чиято работа е да раздели низ на поднизове.
„Този клас не използва регулярни изрази: instead of това просто предавате низ, състоящ се от разделители. Предимството на този подход е, че не разбива целия низ на части наведнъж, а instead of това се движи от началото до края. стъпка по стъпка.
Класът има конструктор и два метода. Предаваме на конструктора низ, който разделяме на части, и низ, съставен от набор от разделителни знаци.
Методи | Описание |
---|---|
|
Връща следващия подниз |
|
Проверява дали има още поднизове. |
„Този клас по няHowъв начин ми напомня за класа Scanner, който също има nextLine()
и hashNextLine()
методи.
„Това е добро наблюдение, което сте направor. Можете да създадете StringTokenizer
обект с тази команда:
StringTokenizer name = new StringTokenizer(string, delimiters);
Където низ е низът, който трябва да бъде разделен на части. А разделителите са низ и всеки знак в него се третира като разделител. Пример:
Код | Конзолен изход |
---|---|
|
|
„Имайте предвид, че всеки знак в низа, предаден във втория низ към StringTokenizer
конструктора, се счита за разделител.
String.format()
метод и StringFormatter
клас
„Друг интересен метод на класа String е format()
.
"Да приемем, че имате различни променливи, съхраняващи данни. Как ги показвате на екрана в един ред? Например, имаме някои данни (лява колона) и желан изход (дясна колона):
Код | Конзолен изход |
---|---|
|
|
Кодът за такава програма ще изглежда така:
Програмен code |
---|
|
„Ще се съгласите с мен, че codeът не е много четим. И ако имената на променливите бяха по-дълги, тогава codeът щеше да стане още по-труден:
Програмен code |
---|
|
„Да, трудно се чете!“
„Не се притеснявайте. Това е често срещана ситуация в програмите от реалния свят, така че искам да ви разкажа за начин да напишете този code по-просто и по-сбито.
String.format
„ String
Класът има статичен format()
метод: той ви позволява да укажете модел за сглобяване на низ с данни. Общият вид на командата е Howто следва:
String name = String.format(pattern, parameters);
Пример:
Код | Резултат |
---|---|
|
|
|
|
|
|
„ format()
Първият параметър на метода е форматиращ низ, който съдържа целия желан текст заедно със специални знаци, наречени спецификатори на формат (като %d
и %s
) на местата, където трябва да вмъкнете данни.
" format()
Методът замества тези %s
и %d
форматиращи спецификатори с параметрите, които следват форматния низ в списъка с параметри. Ако искаме да вмъкнем низ, тогава пишем . %s
Ако искаме да вмъкнем число, тогава форматният спецификатор е %d
. Пример:
Код | Резултат |
---|---|
|
s е равно на"a=1, b=4, c=3" |
„Ето кратък списък със спецификатори на формат, които могат да се използват във форматния низ:
Спецификатор | Значение |
---|---|
|
String |
|
число: byte , short , int ,long |
|
реално число: float ,double |
|
boolean |
|
char |
|
Date |
|
% характер |
"Тези спецификатори указват типа на данните, но има и спецификатори, които указват реда на данните. За да получите аргумент по неговия номер (номерирането започва от едно), трябва да напишете " % 1$ d " instead of " %d ". Пример:
Код | Резултат |
---|---|
|
s е равно на"a=13, b=12, c=11" |
%3$d
ще получи третия аргумент, %2$d
ще получи втория аргумент и %d
ще получи първия аргумент. Спецификаторите %s
и %d
формат се отнасят до аргументи, независимо от спецификаторите като %3$d
or%2$s
Стринг пул
"Всеки низ, посочен в codeа като низов литерал, се съхранява в област от паметта, наречена докато StringPool
програмата работи. StringPool
е специален масив за съхраняване на низове. Целта му е да оптимизира съхранението на низове:
"Първо, низовете, посочени в codeа, трябва да се съхраняват някъде, нали? Кодът се състои от команди, но данните (особено големите низове) трябва да се съхраняват в паметта отделно от codeа. В codeа се появяват само препратки към обекти на низове.
„Второ, всички идентични низови литерали трябва да се съхраняват в паметта само веднъж. И точно така работи. Когато codeът на вашия клас се зареди от Java машината, всички низови литерали се добавят към, ако вече не са там. Ако StringPool
са вече има, тогава просто използваме препратка към низ от StringPool
.
Съответно, ако присвоите един и същ литерал на няколко String променливи във вашия code, тогава тези променливи ще съдържат една и съща препратка. Към единствения веднъж ще бъде добавен литерал StringPool
. Във всички останали случаи codeът ще получи препратка към низа, който вече е зареден в StringPool
.
Ето How работи приблизително:
Код | Работа със StringPoll |
---|---|
|
|
"Ето защо променливите a
и b
ще съхраняват едни и същи препратки."
„Надявам се, че съм разбрал всичко правилно.
intern()
метод.
„И най-добрата част е, че можете програмно да добавите всеки низ към StringPool
. За да направите това, просто трябва да извикате метода String
на променливата intern()
.
„ intern()
Методът ще добави низа към, StringPool
ако вече не е там, и ще върне препратка към низа в StringPool
.
StringPool
„И Howво ще се случи, ако към метода using се добавят два еднакви низа intern()
?“
"Методът ще върне същите препратки. Това може да се използва за сравняване на низове по препратка. Пример:
Код | Забележка |
---|---|
|
|
|
|
Едва ли ще използвате този метод често. Въпреки това хората обичат да питат за това на интервюта за работа.
„Така че е по-добре да знаеш за това, отколкото да не знаеш. Благодаря, Ели!“
GO TO FULL VERSION