- Әдістері
- Кездейсоқ жолды құру
- Жолды салыстыру:
equals()
немесе ==
?
Сыныпты
String
бағдарламашылар өте жиі пайдаланады, сондықтан оны өте жақсы меңгеру керек.
Класс нысандарының
String
өзгермейтінін есте сақтаңыз. Сонымен, сіз жолды өзгертемін деп ойласаңыз, шын мәнінде жаңа жолды жасайсыз.
StringBuffer
Java- да
StringBuilder
жолды өзгертуге мүмкіндік беретін арнайы сыныптар бар .
String
,
StringBuffer
, сыныптары
java.langStringBuilder
бумасында анықталған және импорттық мәлімдемесіз автоматты түрде қолжетімді. Барлық үш класс интерфейсті жүзеге асырады . Жолды құру өте қарапайым. Мысалы, сіз мұны істей аласыз:
CharSequence
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
Сіз жолдар массивін жасай аласыз:
String[] cats = {"Васька", "Barsik", "Murzik"};
Сіз бос сынып нысанын жасай аласыз
String
:
String str = new String();
Таңбалар массиві арқылы жолды жасауға болады:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
Сондай-ақ символдар массивінің ауқымын орнатуға мүмкіндік беретін конструктор бар. Ауқымның басталуын және пайдаланылатын таңбалар санын көрсету керек:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
Келесі конструкторларды пайдаланып,
String
сыныптар нысанынан сынып нысанын жасауға болады :
StringBuffer
StringBuilder
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)
Операторлар +
және += үшінString
Java тілінде қосу белгісі (
+
) жолды біріктіруді, басқаша айтқанда, жолдарды біріктіруді білдіреді.
String cat = "Кот";
String name = "Васька";
String fullname = cat + " " + name;
Егер өрнектегі операндтардың бірінде жол болса, онда басқа операндтар да жолдар болуы керек. Сондықтан Java-ның өзі айнымалы мәндерді, тіпті олар жол болмаса да, жол көрінісіне шығара алады.
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws;
За кулисами Java за нас преобразовало число 4 в строку "4"
Жолдарды пішімдеу
Бізде жол ресурсы бар делік:
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
Бұл жолды элементте бағдарламалы түрде көрсету үшін
TextView
codeты пайдалануға болады:
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
Сізде бірнеше мысық бар деп елестетіп көріңіз. Сіз, әрине, әрбір мысық үшін өз желісін аласыз. Бірақ жолдар өте ұқсас, тек аттары мен жасы өзгереді. Сіз сондай-ақ лаптар мен құйрықтардың санын өзгерте аласыз (не шегесіз?). Мұндай жағдайларда жолды пішімдеуді қолдануға болады. Біз өзгертетін сөздерді анықтап, оларды пайыздық таңбадан басталатын таңбалардың арнайы жиынымен, содан кейін бір көбейтетін санмен, содан кейін
$s
жолдар үшін немесе
$d
сандар үшін ауыстыруымыз керек. Сонымен, жолдық ресурсымызды келесідей өзгертейік:
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
Кодқа өзгертулер енгізейік:
String strBarsik = "Barsik";
String strPaws = "четыре";
String strTail = "one";
int year = 5;
String strCats = getResources().getString(R.string.aboutcat);
String strFinal = String.format(strCats, strBarsik, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Егер сізде Васка мысық болса және ол алты жаста болса, онда екі айнымалы мәнді қосып, жолды пішімдеңіз
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Мұнда қарапайым пішімдеу мысалы берілген. Оны есте сақтаңыз және оны дұрыс жерде қолданыңыз.
Жолдық ресурс
Жолдарды ресурстарда сақтау ұсынылады. Жол ресурсына бағдарламалы түрде қол жеткізу келесідей орындалады:
String catName = getResources().getString(R.string.barsik);
Ресурстардағы жол массивтерінен жолдарды шығарып алыңыз
Сізде strings.xml файлында анықталған жол жиымы бар делік
cats_array
. Содан кейін келесідей ресурстардан жолдарға қол жеткізе аласыз:
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);
Әдістері
public char charAt (int index)
Осы жолда көрсетілген ығысудағы таңбаны қайтарады. Кері санақ 0-ден басталады. Теріс және жоқ мәндерді пайдаланудың қажеті жоқ, байыптырақ болыңыз. Бірнеше таңбаны шығару үшін пайдаланыңыз
getChars()
.
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar));
public int codePointAt(int index)
Берілген индекстегі Юниcode таңбасын қайтарады
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar));
public int codePointBefore(int index)
Берілген индекстің алдындағы Юниcode таңбасын қайтарады
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar));
public int codePointCount(int start, int end)
start
және позициялары арасындағы Юниcode таңбаларының санын есептейді
end
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar));
public int compareTo(String string)
Көрсетілген жолды Юниcode таңба мәндерінің көмегімен салыстырады және қай жол келесіден кіші, тең немесе үлкен екенін есептейді. Сұрыптау үшін пайдалануға болады. Іс есепке алынады. Егер жолдар сәйкес келсе, онда 0 қайтарылады, егер нөлден аз болса, онда шақыру жолы жолдан кіші
string
, егер нөлден үлкен болса, онда шақыру жолы жолдан үлкен болады
string
. Бас әріптегі сөздер кіші әріптердің үстіне қойылады.
String testString = "Котёнок";
if (testString.compareTo("котёнок") == 0) {
tvInfo.setText("Строки равны");
} else {
tvInfo.setText("Строки не равны. Возвращено"
+ testString.compareTo("котёнок"));
}
Көпіршікті сұрыптау арқылы жолдар массивін сұрыптайық.
String[] poem = { "Мы", "везём", "с", "собой", "кота" };
for (int j = 0; j < poem.length; j++) {
for (int i = j + 1; i < poem.length; i++) {
if (poem[i].compareTo(poem[j]) < 0) {
String temp = poem[j];
poem[j] = poem[i];
poem[i] = temp;
}
}
System.out.println(poem[j]);
}
Нәтижесінде біз аламыз:
Мы
везём
кота
с
собой
Көріп отырғаныңыздай,
терминдердің орындарын өзгерту мысықтардың сұрыптау сомасын өзгертпейді.
public int compareToIgnoreCase (String string)
Көрсетілген жолды регистрге сезімтал емес Юниcode таңба мәндерінің көмегімен салыстырады.
String testString = "Котёнок";
if (testString.compareToIgnoreCase("котёнок") == 0) {
tv.setText("Строки равны");
} else {
tv.setText("Строки не равны. Возвращено"
+ testString.compareTo("котёнок"));
}
public String concat (String string)
Жолды көрсетілген жолмен біріктіреді. Екі жолдың жалғауын қамтитын жаңа жол қайтарылады. Әдіс атауының өзінде мысық бар екенін ескеріңіз!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
Әдіс оператор сияқты функцияны орындайды
+
және жазылуы мүмкін
Сук + кот
. Бірақ нағыз мысық адам «мысық» әдісін қолданады.
public boolean contains (CharSequence cs)
Жолда таңбалар тізбегі бар-жоғын анықтайды
CharSequence
String testString = "котёнок";
if(testString.contains("кот")){
infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length)
ҰзындықтыңData
позициясынан
start
(нөлге негізделген нөмірлеу) басталатын массивтен көрсетілген таңбаларды қамтитын жаңа жолды жасайды . Көрсетілген массивтен таңбаларды қамтитын жаңа жолды жасайды. Жол жасалғаннан кейін массивді өзгерту жасалған жолды өзгертпейді. Жолдың аяқталуын тексереді .
public static String copyValueOf(char[] data)
public boolean endsWith(String suffix)
suffix
String str1 = "Суккот";
if(str1.endsWith("кот"))
infoTextView.setText("Слово заканчивается на котике");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string)
Көрсетілген нысан мен жолды салыстырады және салыстырылған жолдар тең болса,
ақиқат мәнін қайтарады, яғни. бірдей таңбаларды және бірдей регистрді ескеретін тәртіпті қамтиды.
String str1 = "Кот";
String str2 = "Кошка";
if(str1.equals(str2))
infoTextView.setText("Строки совпадают");
else
infoTextView.setText("Строки не совпадают");
==
Әдісті екі нысан сілтемесін салыстыратын және олардың бір данаға сілтеме жасайтынын анықтайтын операторымен шатастырмау керек . Жолды салыстыруды қараңыз:
equals()
немесе
==
?
public boolean equalsIgnoreCase(String string)
Көрсетілген жолды бастапқы жолмен регистрді ескермейтін тәсілмен салыстырады және олар тең болса,
шын мәнін қайтарады. AZ диапазоны az диапазонына тең деп саналады.
String str1 = "Кот";
String str2 = "кот";
if(str1.equalsIgnoreCase(str2))
infoTextView.setText("Строки совпадают");
else
infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
Берілген аумаққа локализацияланған берілген пішімді және дәлелдерді пайдаланып пішімделген жолды қайтарады. Мысалы, күн немесе уақыт
String.format("%.2f", floatValue);
Жаңа жолда кездесетін екі сөзді жапсырамыз. Бұл жағдайда екінші сөз бас әріппен көрсетіледі.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
infoTextView.setText(strResult);
Санды сегіздік жүйеге түрлендіру.
String str1 = "8";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);
infoTextView.setText(strResult);
Аналогия бойынша біз он алтылық жүйеде көрсетеміз
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
infoTextView.setText(strResult);
Бас әріппен пайдалану үшін
%X
, содан кейін
ff
ол болады
FF
. Ондық жүйені пайдалану үшін
%d
. Күнді әртүрлі жолдармен де көрсетуге болады.
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
String.format(locale, "%tD\n", now) +
String.format(locale, "%tF\n", now) +
String.format(locale, "%tr\n", now) +
String.format(locale, "%tz\n", now) +
String.format(locale, "%tZ\n", now));
public byte[] getBytes(String charsetName)
Берілген пішімді пайдаланып пішімделген жолды қайтарады.
public void getBytes(int start, int end, byte[] data, int index)
және басқа шамадан тыс жүктемелер Әдіс таңбаларды byte массивінде сақтайды, бұл
getChars()
. Басқа Юниcode таңбаларын пайдаланатын әртүрлі көздерден жолдарды экспорттау кезінде жиі пайдаланылады. Мысалы, Java әдепкі бойынша 16 биттік Юниcode таңбаларымен жұмыс істейді, ал Интернетте жолдар жиі 8 биттік Юниcode, ASCII және т.б. пайдаланады.
public void getChars(int start, int end, char[] buffer, int index)
Жолдан бірнеше таңбаларды шығару әдісі. Ішкі жолдың басының индексін (
start
), шығарылатын ішкі жолдың соңынан кейінгі таңбаның индексін ( end ) көрсету керек. Таңдалған таңбаларды қабылдайтын массив
буфер параметрінде болады . Ішкі жол жазылатын массивтегі индекс
индекс параметрінде жіберіледі . Жиым көрсетілген ішкі жолдағы барлық таңбаларды қамту үшін жеткілікті үлкен екеніне көз жеткізіңіз.
String unusualCat = "Котёнок по имени Гав";
int start = 5;
int end = 12;
char[] buf = new char[end - start];
unusualCat.getChars(start, end, buf, 0);
infoTextView.setText(new String(buf));
public int hashCode()
Осы нысанның хэш codeы болып табылатын бүтін санды қайтарады.
public int indexOf(int c)
Көрсетілген индексі бар бірінші кездескен позицияның нөмірін қайтарады c.
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start)
Позициядан бастап индексті іздейді
start
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string)
Таңбалар жолын іздейді
subString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start)
subString
Орнынан басталатын таңбалар жолын іздейді
start
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern ()
Жолдың «хэштері»
public boolean isEmpty ()
Жолдың бос екенін тексереді
if(catname.isEmpty()) {
}
Бұл әдіс API 9 (Android 2.1) жүйесінде пайда болды. Ескі құрылғылар үшін пайдалану
String.length() == 0
public int lastIndexOf (String string) и другие перегруженные версии
Көрсетілген индексте соңғы кездескен орынның нөмірін қайтарады. Мысалы, файл атауын кеңейтусіз келесідей алуға болады:
filename.toString().substring(0, filename.getString().lastIndexOf("."));
Бұл мысалда біз соңғы нүктенің орнын аламыз және оның алдындағы ішкі жолды аламыз.
public int length()
Жолдың ұзындығын қайтарады
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length()));
public boolean matches(String regularExpression)
Жолдың тұрақты өрнектерге сәйкес келетінін тексереді.
public int offsetByCodePoints (int index, int codePointOffset)
codePointOffset
Параметрмен көрсетілген бастапқы позициядан кейінгі қашықтықта орналасқан орынды қайтарады.Әдіс
index
public boolean regionMatches (int thisStart, String string, int start, int length)
жолдың көрсетілген бөлігін жолдың басқа бөлігімен салыстырады. Сыныптың шақырушы нысанының жол диапазонының басының индексін көрсету керек
String
. Салыстырылатын жол параметрде жіберіледі
string
. Салыстыруды орындау қажет болатын таңбаның индексі параметрде
start
, ал салыстырылатын ішкі жолдың ұзындығы параметрде беріледі
length
.
public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length)
Шамадан тыс жүктелген нұсқа. Әдіс регистрді елемей, жолдың көрсетілген бөлігін жолдың басқа бөлігімен салыстырады.
public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии
Таңбаны немесе таңбалар тізбегін
target
өзгертеді
replacement
String testString = "whale";
infoTextView.setText(testString.replace("And", "о"));
public String replaceAll (String regularExpression, String replacement)
public String replaceFirst (String regularExpression, String replacement)
Тұрақты өрнектің көмегімен бірінші таңбаларды жояды. Мысалы, 001, 007, 000024 сандарының басындағы нөлдерді алып тастау қажет болса, онда сіз бұл қоңырауды пайдалана аласыз.
String s = "001234-cat";
String s = s.replaceFirst ("^0*", "");
public String[] split (String regularExpression) и другие перегруженные версии
Жолды сөздер массивіне бөледі. Мысалы, Васка Рыжик Мурзик Барсик жолы бар және біз мысық атауларының массивін алғымыз келеді:
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");
Біз алып жатырмыз:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix)
prefix
Жолдың жолдың басынан таңбалардан басталатынын тексереді
String str1 = "котлета";
if(str1.startsWith("кот"))
infoTextView.setText("Слово содержит кота");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start)
prefix
Берілген жолдың көрсетілген орындағы таңбалардан басталатынын тексереді .
String str1 = "Суккот";
if(str1.startsWith("кот", 3))
infoTextView.setText("Слово содержит кота");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end)
Әдісіне ұқсас
substring()
, бірақ үшін пайдалануға болады
CharSequence
.
public String substring(int start)
және басқа шамадан тыс жүктемелер Берілген жолдан позициядан бастап
start
жолдың соңына дейін/позициядағы таңбамен аяқталатын таңбалары бар жаңа тізбекті/жолды жасайды
end
. Жаңа жолда
start
1-ден соңына дейін таңбалар бар, сондықтан біз тағы бір таңба аламыз.
String testString = "скотина";
infoTextView.setText(testString.substring(1, 4));
public char[] toCharArray()
Осы жолдағы таңбаларды таңбалар массивіне көшіреді. Сол нәтижені арқылы алуға болады
getChars()
. Құжаттама бұл әдісті пайдалануды ұсынбайды
charAt()
.
String unusualCat = "Котёнок по имени Гав";
char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии
Жолды кіші әріпке түрлендіреді. Әдепкі тіл түрлендіруді басқарады. Жолдық мысық = «Мысық»; Төменгі жол = cat.toLowerCase(); infoTextView.setText(төменгі);
public String toString ()
Жолды қайтарады. Өзі жол болып табылатын жолдың өзі үшін жолды қайтару мағынасыз (о, мен оны қалай бүгдім). Бірақ бұл әдіс басқа сыныптар үшін өте пайдалы.
public String toUpperCase()
Жолды бас әріпке түрлендіреді. Әдепкі тіл түрлендіруді басқарады.
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim()
Жолдың басындағы және соңындағы бос орындарды жояды.
String str = " Hello Kitty ".trim();
infoTextView.setText(str);
public static String valueOf(long value)
және басқа шамадан тыс жүктемелер Мазмұнды (сандар, нысандар, таңбалар, таңбалар массивтері) жолға түрлендіреді.
int catAge = 7;
infoTextView.setText(String.valueOf(catAge));
Кездейсоқ жолды құру
Бізге берілген таңбалардың кездейсоқ жолы қажет делік.
private static final String mCHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
private static final int STR_LENGTH = 9;
Random random = new Random();
public void onClick(View view) {
TextView infoTextView = (TextView) findViewById(R.id.textViewInfo);
infoTextView.setText(createRandomString());
}
public String createRandomString() {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < STR_LENGTH; i++) {
int number = random.nextInt(mCHAR.length());
char ch = mCHAR.charAt(number);
builder.append(ch);
}
return builder.toString();
}
Жолды салыстыру: equals()
немесе ==
?
Мысал қарастырайық.
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;
infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
Екі айнымалыда бір сөз болса да, біз екі түрлі нысанмен жұмыс істейміз және оператор
false==
қайтарады . Бірде, ағаштар үлкен болған кезде, маған әртүрлі көздерден алынған екі жолды салыстыру керек болды. Жолдар бірдей көрінгенімен, оператор арқылы салыстыру
жалған болып шықты және мен үшін барлық карталарды шатастырды. Мен пайдалану керек екенін кейінірек білдім . Java тіліндегі жол бөлек нысан болып табылады, ол басқа нысанмен бірдей болмауы мүмкін, бірақ жолдың шығысы экранда бірдей көрінуі мүмкін. Java логикалық оператор жағдайында (сонымен қатар ) an objectілерге сілтемелерді салыстырады (примитивтермен жұмыс істегенде мұндай мәселе болмайды):
==
equals()
==
!=
String s1 = "hello";
String s2 = "hello";
String s3 = s1;
String s4 = "h" + "e" + "l" + "l" + "o";
String s5 = new String("hello");
String s6 = new String(new char[]{'h', 'e', 'l', 'l', 'o'});
infoTextView.setText(s1 + " == " + s2 + ": " + (s1 == s2));
GO TO FULL VERSION