JavaRush /Java блогу /Random-KY /Стринг классы
articles
Деңгээл

Стринг классы

Группада жарыяланган
  • Методдор
  • Кокус сапты түзүү
  • Саптарды салыштыруу: equals()же ==?
Классты Stringпрограммисттер көп колдонушат, ошондуктан аны абдан жакшы үйрөнүү керек. Класс сабы - 1Класс an objectтери Stringөзгөрүлбөс экенин унутпаңыз. Ошентип, сиз сапты өзгөртүп жатам деп ойлогонуңузда, сиз чындыгында жаңы сапты түзүп жатасыз. Java атайын класстарга ээ StringBufferжана StringBuilderсапты өзгөртүүгө мүмкүндүк берет. String, StringBuffer, класстары java.langStringBuilder пакетинде аныкталган жана импорттук декларациясыз автоматтык түрдө жеткorктүү. Үч класс тең интерфейсти ишке ашырат . Сапты түзүү абдан жөнөкөй. Мисалы, сиз муну кыла аласыз: CharSequence
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
Сиз саптардын массивин түзө аласыз:
String[] cats = {"Васька", "Barsik", "Murzik"};
Сиз бош класс an objectин түзө аласыз 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класстар an objectинен класс an objectисин түзө аласыз :StringBufferStringBuilder
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)

Операторлор +жана += үчүнString

Java тorнде плюс белгиси ( +) саптарды бириктирүүнү, башкача айтканда, саптарды бириктирүүнү билдирет.
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>
Келгиле, codeго өзгөртүүлөрдү киргизели:
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) Белгиленген сап менен сапты бириктирет. Эки саптын бириктирorшин камтыган жаңы сап кайтарылды. Методдун аталышында мышык бар экенине көңүл буруңуз!
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) Көрсөтүлгөн an object менен сапты салыштырат жана салыштырылган саптар бирдей болсо, чындыкты кайтарат, б.а. ошол эле символдорду жана бирдей регистрди сезүүчү тартипте камтыйт.
String str1 = "Кот";
String str2 = "Кошка";

if(str1.equals(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
==Метод эки an objectтин шилтемесин салыштырып, алардын бир эле инстанцияга тиешелүү экендигин аныктаган оператор менен чаташтырбоо керек . Саптарды салыштырууну караңыз: 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() Бул an objectтин хэш 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) Метод саптын көрсөтүлгөн бөлүгүн саптын башка бөлүгү менен салыштырат. Сиз класстын чакыруучу an objectинин катар диапазонунун башталышынын индексин көрсөтүшүңүз керек String. Салыштыра турган сап параметрде өткөрүлөт string. Салыштыруу жүргүзүлө турган символдун индекси параметрде start, ал эми салыштырыла турган ички саптын узундугу параметрде өткөрүлөт length. public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length) Ашыкча жүктөлгөн version. Метод регистрге көңүл бурбай, саптын көрсөтүлгөн бөлүгүн саптын башка бөлүгү менен салыштырат. 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. Жаңы сапта startаягына чейин символдор бар - 1, ошондуктан биз дагы бир белги алабыз.
String testString = "скотина";

infoTextView.setText(testString.substring(1, 4)); // возвращается кот
public char[] toCharArray() Бул саптагы символдорду символдор массивине көчүрөт. Ошол эле натыйжаны аркылуу алууга болот getChars(). Документтер бул ыкманы колдонууну сунуш кылbyte, charAt().
String unusualCat = "Котёнок по имени Гав";

char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии Сапты кичине тамгага которот. Демейки тил конversionны көзөмөлдөйт. Стринг cat = "Cat"; Төмөнкү сап = cat.toLowerCase(); infoTextView.setText(төмөнкү); public String toString () Сапты кайтарат. Жиптин өзү үчүн, ал өзү эле жип, жипти кайтаруу маанисиз (оо, мен аны кантип ийкем). Бирок бул ыкма башка класстар үчүн абдан пайдалуу. public String toUpperCase() Сапты чоң тамгага которот. Демейки тил конversionны көзөмөлдөйт.
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)жана башка ашыкча жүктөөлөр Мазмунду (сандарды, an objectтерди, символдорду, символдук массивдерди) сапка айлантат.
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);
Эки өзгөрмө бир эле сөздү камтыса да, биз эки башка an object менен иштеп жатабыз жана оператор false== кайтарып берет . Бир жолу, дарактар ​​чоң болгондо, мен ар кайсы булактардан алынган эки жипти салыштыруу керек болду. Саптар так бирдей көрүнгөнү менен, оператордун жардамы менен салыштыруу жалган болуп чыкты жана мен үчүн бардык карталарды чаташтырды. Ошондо гана мен колдонуу керек экенин түшүндүм . Java тorндеги сап өзүнчө an object болуп саналат, ал башка an object менен бирдей болбошу мүмкүн, бирок саптын чыгышы экранда бирдей көрүнүшү мүмкүн. Бул жөн гана 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