1. Класс StringTokenizer
Ва боз чанд сенарияи бештарини кор бо сатрҳо. Чӣ тавр сатре ба якчанд қисм тақсим мешавад? Барои ин якчанд роҳҳо ҳастанд.
Метод split()
Аввалин роҳ барои тақсим кардани сатре ба якчанд қисмҳо — истифодаи методи split()
мебошад. Дар он ба сифати параметр бояд ифодаи муқаррарӣ дохил карда шавад: намунаи махсуси сатри-тақсимкунанда. Чӣ дар бораи ифодаҳои муқаррарӣ, шумо дар квест Java Multithreading мефаҳмед.
Мисол:
Код | Натиҷа |
---|---|
|
Маколаро дар натиҷа меофаред аз се сатри: |
Сода, аммо гоҳҳо чунин роҳ барзиёд аст. Агар тақсимкунандаҳо бисёранд, масалан, «фосила», «enter», «таб», «нуқта», лозим мешавад ифодаи мураккаби муқарарӣ сохтан, ки онро хондан мушкил мекунад ва табдили он низ мушкил меояд.
Класс StringTokenizer
Дар Java як класи махсус мавҷуд аст, ки тамоми кори вай - тақсим кардани сатри ба ҳастҳо мебошад.
Ин класс ифодаи муқаррарӣ истифода намекунад: ба ҷои ин ба он танҳо сатре дохил карда мешавад, ки аз рамзҳои ҷудокунанда иборат аст. Афзалияти ин роҳ дар он аст, ки он фавран тамоми сатри ба пораҳо тақсим намекунад, балки тадриҷан аз оғоз ба охир меравад.
Сохтори класс аз конструктор ва ду методи асосӣ иборат аст. Дар конструктор бояд сатре, ки мо онро ба қисмҳо тақсим мекунем ва сатри — маҷмӯи рамзҳои истифодашаванда барои тақсим кардан, дохил карда шавад.
Методҳо | Тавсиф |
---|---|
|
Ҳастаи навбатиро бармегардонад |
|
Тафтиш мекунад, ки боз ҳастҳам ҳаст. |
Ин класс ба класс Scanner
каме монанд аст, ки ҳамон метод nextLine()
ва hasNextLine()
дошт.
Для сохтани объект StringTokenizer
лозим аст, ки фармоиш дода шавад:
StringTokenizer име = new StringTokenizer(строка, разделители);
Дар он сатри — ин строка
аст, ки мо онро ба қисмҳо тақсим мекунем. Ва разделители
— ин сатри, ки ҳар як рамзи он ҳамчун рамзи ҷудокунанда ҳисобида мешавад. Мисол:
Код | Намоиши экран |
---|---|
|
|
Ба назар гиред, ки ҳар як рамзи сатре, ки дар таркиби дуввуми конструктори StringTokenizer
гузошта шудааст, ҳамчун рамзи тақсимкунанда ҳисобида мешавад.
2. Метод String.format()
ва класс StringFormatter
Ва боз дигар методи ҷолиби класи String — format()
.
Бигзор, ки шумо маълумотҳои гуногун доред. Чӣ гуна онҳоро дар як сатр ба экран баровардан мумкин аст? Масалан, мо маълумот дорем (сахифа чап) ва намоиши дилхоҳ (сахифа рост):
Код | Намоиши экран |
---|---|
|
|
Шояд коди шумо тақрибан ҳамин тавр бошад:
Код программы |
---|
|
Ин код чандон хонданбахш нест. Боз, агар номҳои параметрҳо дарозтар мебуданд, код боз мушкилтар мешуд:
Код программы |
---|
|
На он қадар хонданбахш, нест?
Аммо дар барномаҳои воқеӣ чунин ҳолат зуд-зуд пайдо мешавад, бинобар ин ман мехоҳам дар бораи роҳи соддатар ва кӯтоҳтар кардани ин код нақл кунам.
String.format
У класи String методи статикӣ format()
дорад: он имкон медиҳад намунаи пайвасти сатри бо маълумотҳоро муқаррар кунад. Намуди умумии ин команда чунин аст:
String имя = String.format(шаблон, параметры);
Мисол:
Код | Натиҷа |
---|---|
|
|
|
|
|
|
Дар метод format()
аввалин параметр сатри-намуна мегузоранд, ки тамоми матни лозимиро дарбар мегирад, аммо дар ҷойҳое, ки бояд маълумот дохил шавад, рамзҳои махсус навишта мешаванд, ба монанди %d
, %s
ва ғайра.
Ин %s
ва %d
методи format()
иваз мекунанд ба параметрҳое, ки дар пайи сатри-намуна омадаанд. Агар лозим бошад сатри дохил карда шавад, мо %s
менависем, агар рақам бошад — %d
. Мисол:
Код | Натиҷа |
---|---|
|
s баробар хоҳад буд ба "a=1, b=4, c=3" |
Ин номгӯи кӯтоҳи параметрҳоест, ки метавон дар дохили намуна истифода кард:
Символ | Значение |
---|---|
|
String |
|
рақами бутун: byte , short , int , long |
|
рақами ҳақиқӣ: float , double |
|
boolean |
|
char |
|
Date |
|
Символ % |
Ин параметрҳо ба намуди маълумот ишора мекунанд, аммо инчунин параметрҳо ҳастанд, ки ба тартиби маълумот ишора мекунанд. То ки параметрро аз рӯи рақами он (рақамзанӣ аз як оғоз мешавад) гирифт, бояд %1$d
ба ҷои %d
нависед. Мисол:
Код | Натиҷа |
---|---|
|
s баробар хоҳад буд ба "a=13, b=12, c=11" |
%3$d
параметри 3-умро медиҳад, %2$d
параметри дуюмро. %d
параметри аввалро медиҳад. Параметрҳои намунаи %s
, %d
ба параметрҳои-намунӣ назар мекунанд, новобаста аз параметрҳои намунаи навъи %3$d
ё %2$s
3. String Pool
Ҳамаи сатрҳое, ки дар код дар шакли литералҳо таъин шудаанд, ҳангоми коркарди барнома дар хотира дар тако номида шуд асосан StringPool
нигоҳ дошта мешаванд. StringPool
— ин маҷмӯи махсус барои захираи сатрҳо мебошад. Ҳадаф аз он оптимизатсияи захираи сатрҳо мебошад:
Аввалан, сатрҳое, ки дар код таъин шудаанд, бояд дар куҷое захира карда шаванд. Код - ин фармоишҳо, аммо маълумот (аз ин ҷумла бузургҳое мисли сатрҳо) бояд дар хотира алоҳида аз код захира карда шаванд. Дар код танҳо истинодҳо ба объекти-сатрҳо вуҷуд доранд.
Сониян, ҳама литералҳои якхела метавонанд танҳо як бор дар хотира захира шаванд. Ин ҳамон тавр кор мекунад. Вақте ки коди шморо Java-мошинбор мекунад тамоми литералҳои стрингӣ ба StringPool
илова карда мешаванд, агар онҳо он ҷо ҳанӯз набошанд. Агар алакай бошанд, истиноди ба сатр аз StringPool
истифода мешавад.
Бинобар ин, агар шумо дар коди худ ба чанд String
-параметр literallҳои якхела таъин кунед, параметрҳо хоҳанд дошт истиноди якхела. Дар StringPool
literall танҳо як бор илова карда мешавад, дар тамоми ҳолатҳои дигар истиноди ба сатр, ки ҳангоми ба StringPool
илова шудааст, истифода бурда мешавад.
Чӣ тавр ин тақрибан кор мекунад:
Код | Кор бо StringPool |
---|---|
|
|
Бинобар ин, параметрҳои a
ва b
истинодҳои якхела нигоҳ медоранд.
Метод intern()
Ну ва чизи ҷолибтаринаш: шумо метавонед ҳар кадом сатрро дар StringPool
барномашаванда ворид кунед. Барои ин танҳо лозим аст, ки метод intern()
дар String
-параметр хонед.
Метод intern()
сатрро дар StringPool
илова мекунад, агар он дар он ҷо ҳанӯз нест ва истиноди ба сатр аз StringPool
бармегардонад.
Агар дар StringPool
хоҳиш бо методи intern()
ду сатрҳои якхела илова шаванд, методи якхели истинодҳоро бармегардонад. Ин метавонад барои муқоисаи ин сатҳо аз рӯи истинод истифода шавад. Мисол:
Код | Эзоҳ |
---|---|
|
|
|
|
Шояд ин методро зиёд истифода набашта бошед, аммо дар мусоҳибаҳо дар бораи он пурсиданро дӯст медоранд, бинобар ин беҳтар аст дар бораи он донед, ки надонед.
GO TO FULL VERSION