JavaRush /Java блогы /Random-KK /Жол сыныбы
articles
Деңгей

Жол сыныбы

Топта жарияланған
  • Әдістері
  • Кездейсоқ жолды құру
  • Жолды салыстыру: equals()немесе ==?
Сыныпты Stringбағдарламашылар өте жиі пайдаланады, сондықтан оны өте жақсы меңгеру керек. Сынып жолы - 1Класс нысандарының Stringөзгермейтінін есте сақтаңыз. Сонымен, сіз жолды өзгертемін деп ойласаңыз, шын мәнінде жаңа жолды жасайсыз. StringBufferJava- да 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сыныптар нысанынан сынып нысанын жасауға болады :StringBufferStringBuilder
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>
Бұл жолды элементте бағдарламалы түрде көрсету үшін TextViewcodeты пайдалануға болады:
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)); // возвращает 1105
public int codePointBefore(int index) Берілген индекстің алдындағы Юниcode таңбасын қайтарады
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointCount(int start, int end)startжәне позициялары арасындағы Юниcode таңбаларының санын есептейдіend
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar)); // возвращает 3
public int compareTo(String string) Көрсетілген жолды Юниcode таңба мәндерінің көмегімен салыстырады және қай жол келесіден кіші, тең немесе үлкен екенін есептейді. Сұрыптау үшін пайдалануға болады. Іс есепке алынады. Егер жолдар сәйкес келсе, онда 0 қайтарылады, егер нөлден аз болса, онда шақыру жолы жолдан кіші string, егер нөлден үлкен болса, онда шақыру жолы жолдан үлкен болады string. Бас әріптегі сөздер кіші әріптердің үстіне қойылады.
String testString = "Котёнок";

if (testString.compareTo("котёнок") == 0) {
    tvInfo.setText("Строки равны");
} else {
    tvInfo.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок")); // возвращает -32
}
Көпіршікті сұрыптау арқылы жолдар массивін сұрыптайық.
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)
Берілген аумаққа локализацияланған берілген пішімді және дәлелдерді пайдаланып пішімделген жолды қайтарады. Мысалы, күн немесе уақыт
// выводим число типа float с двумя знаками после запятой
String.format("%.2f", floatValue);
Жаңа жолда кездесетін екі сөзді жапсырамыз. Бұл жағдайда екінші сөз бас әріппен көрсетіледі.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
// выводим результат в TextView
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);
// число 255 будет выведено How ff
infoTextView.setText(strResult);
Бас әріппен пайдалану үшін %X, содан кейін ffол болады FF. Ондық жүйені пайдалану үшін %d. Күнді әртүрлі жолдармен де көрсетуге болады.
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
		String.format(locale, "%tD\n", now) + // (MM/DD/YY)
		String.format(locale, "%tF\n", now) + // (YYYY-MM-DD)
		String.format(locale, "%tr\n", now) + // Full 12-hour time
		String.format(locale, "%tz\n", now) + // Time zone GMT offset
		String.format(locale, "%tZ\n", now)); // Localized time zone bbreviation
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 = "котёнок";
// символ ё встречается в четвёртой позиции (index = 3)
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start) Позициядан бастап индексті іздейдіstart
String testString = "котёнок";
// вернёт -1, так How после 5 символа буквы ё нет
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()) {
    // здесь ваш code
}
Бұл әдіс 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())); // возвращает 7 (семь символов)
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*", ""); // останется 1234-cat
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. Жаңа жолда start1-ден соңына дейін таңбалар бар, сондықтан біз тағы бір таңба аламыз.
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));
// попробуйте и другие варианты
// infoTextView.setText(s1 + " equals " + s2 + ": " + (s1.equals(s2)));
// infoTextView.setText(s1 + " == " + s3 + ": " + (s1 == s3));
// infoTextView.setText(s1 + " equals " + s3 + ": " + (s1.equals(s3)));
// infoTextView.setText(s1 + " == " + s4 + ": " + (s1 == s4));
// infoTextView.setText(s1 + " equals " + s4 + ": " + (s1.equals(s4)));
// infoTextView.setText(s1 + " == " + s5 + ": " + (s1 == s5)); // false
// infoTextView.setText(s1 + " equals " + s5 + ": " + (s1.equals(s5)));
// infoTextView.setText(s1 + " == " + s6 + ": " + (s1 == s6)); // false
// infoTextView.setText(s1 + " equals " + s6 + ": " + (s1.equals(s6)));
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION