JavaRush /Java Blogu /Random-AZ /String sinfi
articles
Səviyyə

String sinfi

Qrupda dərc edilmişdir
  • Metodlar
  • Təsadüfi bir sətir yaratmaq
  • Simli müqayisə: equals()yoxsa ==?
Sinif Stringçox tez-tez proqramçılar tərəfindən istifadə olunur, ona görə də çox yaxşı öyrənilməlidir. Sinif sətri - 1Unutmayın ki, sinif obyektləri Stringdəyişməzdir. Beləliklə, bir simli dəyişdirdiyinizi düşünəndə, əslində yeni bir sətir yaradırsınız. Java-nın xüsusi sinifləri var StringBufferStringBuildersətirdə dəyişiklik etməyə imkan verir. String, StringBuffer, sinifləri java.langStringBuilder paketində müəyyən edilir və idxal bəyannaməsi olmadan avtomatik olaraq mövcuddur. Hər üç sinif interfeysi həyata keçirir . Bir sətir yaratmaq çox sadədir. Məsələn, bunu edə bilərsiniz: CharSequence
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
Bir sıra sətir yarada bilərsiniz:
String[] cats = {"Васька", "Barsik", "Murzik"};
Boş sinif obyekti yarada bilərsiniz String:
String str = new String();
Simvol massivi vasitəsilə sətir yarada bilərsiniz:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
Simvol massivinin diapazonunu təyin etməyə imkan verən konstruktor da var. Aralığın başlanğıcını və istifadə ediləcək simvolların sayını təyin etməlisiniz:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
Aşağıdakı konstruktorlardan istifadə edərək Stringsiniflər obyektindən sinif obyekti yarada bilərsiniz :StringBufferStringBuilder
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)

Operatorlar +və += üçünString

Java-da artı işarəsi ( +) sətirlərin birləşməsini, başqa sözlə, sətirlərin birləşməsini bildirir.
String cat = "Кот";
String name = "Васька";
//складываем две строки и пробел между ними, чтобы слова не слиплись
String fullname = cat + " " + name; // получится Кот Васька
Əgər ifadədəki operandlardan biri sətirdən ibarətdirsə, o zaman digər operandlar da sətir olmalıdır. Buna görə də, Java özü dəyişənləri sətirlər olmasa belə, simli təsvirə köçürə bilər.
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws; // хотя мы складываем число и строку, но все равно получим строку
За кулисами Java за нас преобразовало число 4 в строку "4"

Sətirlərin formatlaşdırılması

Fərz edək ki, sətir resursumuz var:
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
Bu sətri proqramlı şəkildə elementdə göstərmək üçün TextViewkodu istifadə edə bilərsiniz:
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
Təsəvvür edin ki, bir neçə pişikiniz var. Əlbəttə ki, hər bir pişik üçün öz xəttiniz ola bilər. Amma sətirlər çox oxşardır, yalnız adlar və yaşlar dəyişir. Siz həmçinin pəncələrin və quyruqların sayını dəyişə bilərsiniz (nə siqaret çəkirsiniz?). Belə hallarda simli formatlaşdırma tətbiq edə bilərsiniz. Dəyişdirəcəyimiz sözləri müəyyən etməli və onları faiz simvolu ilə başlayan xüsusi simvol dəsti ilə əvəz etməliyik, sonra bir ədəd artır, sonra $ssətirlər və ya $drəqəmlər üçün. Beləliklə, simli resursumuzu belə dəyişdirək:
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
Koda dəyişikliklər edək:
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);
Bir pişik Vaska varsa və o, altı yaşındadırsa, iki dəyişən əlavə edin və xətti formatlayın
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Budur sadə formatlaşdırma nümunəsi. Onu yadda saxla və düzgün yerlərdə istifadə et.

Sətir resursu

Sətirləri resurslarda saxlamaq məsləhətdir. Sətir resursuna proqramlı şəkildə daxil olmaq bu şəkildə həyata keçirilir:
String catName = getResources().getString(R.string.barsik);

Resurslardakı sətir massivlərindən sətirləri çıxarın

Deyək ki, strings.xml faylında müəyyən edilmiş sətir massiviniz var cats_array. Sonra bu kimi resurslardan sətirlərə daxil ola bilərsiniz:
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);

Metodlar

public char charAt (int index) Bu sətirdə göstərilən ofsetdəki simvolu qaytarır. Geri sayım 0-dan başlayır. Mənfi və mövcud olmayan dəyərlərdən istifadə etməyə ehtiyac yoxdur, daha ciddi olun. Çox simvol çıxarmaq üçün istifadə edin getChars().
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar)); // выводит третий символ - т
public int codePointAt(int index) Verilmiş indeksdə Unicode simvolunu qaytarır
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointBefore(int index) Verilmiş indeksdən əvvəl gələn Unicode simvolunu qaytarır
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointCount(int start, int end)startVə mövqelər arasında Unicode simvollarının sayını hesablayırend
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar)); // возвращает 3
public int compareTo(String string) Unicode simvol dəyərlərindən istifadə edərək göstərilən sətri müqayisə edir və hansı sətirin sonrakıdan kiçik, bərabər və ya böyük olduğunu hesablayır. Çeşidləmə üçün istifadə edilə bilər. İş nəzərə alınır. Sətirlər uyğun gəlirsə, onda 0 qaytarılır, sıfırdan azdırsa, çağırış sətri sətirdən kiçikdir string, sıfırdan böyükdürsə, çağırış sətri sətirdən böyükdür string. Böyük hərfli sözlər kiçik hərflərin üstündə yerləşdirilir.
String testString = "Котёнок";

if (testString.compareTo("котёнок") == 0) {
    tvInfo.setText("Строки равны");
} else {
    tvInfo.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок")); // возвращает -32
}
Bubble sort istifadə edərək sətirlər massivini çeşidləyək.
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]);
}
Nəticədə əldə edirik:
Мы
везём
кота
с
собой
Gördüyünüz kimi, terminlərin yerlərinin dəyişdirilməsi pişiklərin çeşidləmə cəmini dəyişmir . public int compareToIgnoreCase (String string) Böyük hərflərə həssas olmayan Unicode simvol dəyərlərindən istifadə edərək göstərilən sətri müqayisə edir.
String testString = "Котёнок";

if (testString.compareToIgnoreCase("котёнок") == 0) {
    tv.setText("Строки равны"); // слова одинаковы, если не учитывать регистр
} else {
    tv.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок"));
}
public String concat (String string) Müəyyən edilmiş sətirlə sətri birləşdirir. İki sətirin birləşməsini ehtiva edən yeni sətir qaytarılır. Qeyd edək ki, metod adının özündə pişik var!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
Metod operatorla eyni funksiyanı yerinə yetirir +və yazıla bilər Сук + кот. Ancaq əsl pişik adamı "pişik" üsulundan istifadə edəcək. public boolean contains (CharSequence cs) Sətirdə simvollar ardıcıllığının olub olmadığını müəyyən edirCharSequence
String testString = "котёнок";

if(testString.contains("кот")){
    infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length)UzunluğunData mövqeyindən start(sıfır əsaslı nömrələmə) başlayaraq massivdən müəyyən edilmiş simvolları ehtiva edən yeni sətir yaradır . Göstərilən massivdən simvolları ehtiva edən yeni sətir yaradır. Sətir yaradıldıqdan sonra massivin dəyişdirilməsi yaradılmış cərgəni dəyişmir. Sətin bitib-bitmədiyini yoxlayır . 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) Göstərilən obyekti və sətri müqayisə edir və müqayisə edilən sətirlər bərabər olduqda doğru qaytarır, yəni. eyni simvolları və eyni böyük hərflərə həssas qaydada ehtiva edir.
String str1 = "Кот";
String str2 = "Кошка";

if(str1.equals(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
==Metod iki obyekt istinadını müqayisə edən və onların eyni nümunəyə istinad edib-etmədiyini müəyyən edən operatorla qarışdırılmamalıdır . Sim Müqayisəsinə baxın: equals()və ya ==? public boolean equalsIgnoreCase(String string) Göstərilən sətri mənbə sətri ilə hərflərə həssas olmayan şəkildə müqayisə edir və bərabər olduqda doğru qaytarır. AZ diapazonu az diapazonuna bərabər hesab edilir.
String str1 = "Кот";
String str2 = "кот";

if(str1.equalsIgnoreCase(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
Təqdim olunan formatdan və verilmiş əhatə dairəsinə lokallaşdırılmış arqumentlərdən istifadə edərək formatlanmış sətri qaytarır. Məsələn, tarix və ya vaxt
// выводим число типа float с двумя знаками после запятой
String.format("%.2f", floatValue);
Yeni sətirdə görünən iki sözü yapışdırırıq. Bu halda ikinci söz böyük hərflə göstərilir.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
// выводим результат в TextView
infoTextView.setText(strResult);
Ədədi səkkizlik sistemə çevirin.
String str1 = "8";
int inInt = Integer.parseInt(str1); // конвертируем строку в число
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);

infoTextView.setText(strResult);
Analoji olaraq, biz onaltılıq sistemdə göstəririk
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
// число 255 будет выведено How ff
infoTextView.setText(strResult);
Böyük hərf istifadə üçün %X, o zaman ffolacaq FF. Onluq sistem istifadəsi üçün %d. Tarix müxtəlif yollarla da göstərilə bilər.
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) Təqdim olunan formatdan istifadə edərək formatlanmış sətri qaytarır. public void getBytes(int start, int end, byte[] data, int index)və digər həddən artıq yükləmələr Metod simvolları bayt massivində saxlayır getChars(). Tez-tez digər Unicode simvollarından istifadə edən müxtəlif mənbələrdən sətirləri ixrac edərkən istifadə olunur. Məsələn, Java standart olaraq 16-bit Unicode simvolları ilə işləyir və İnternetdə sətirlər çox vaxt 8-bit Unicode, ASCII və s. istifadə edir. public void getChars(int start, int end, char[] buffer, int index) Sətirdən çoxsaylı simvol çıxarmaq üçün üsul. Siz alt sətirin başlanğıcının indeksini ( start), çıxarılacaq alt sətirin sonundan sonrakı simvolun indeksini ( end ) təyin etməlisiniz. Seçilmiş simvolları qəbul edən massiv bufer parametrindədir . Alt sətirin yazılacağı massivdəki indeks indeks parametrinə ötürülür . Massivin göstərilən alt sətirdəki bütün simvolları ehtiva edəcək qədər böyük olduğundan əmin olun.
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() Bu obyekt üçün hash kodu olan tam ədədi qaytarır. public int indexOf(int c) Müəyyən edilmiş indekslə ilk qarşılaşılan mövqenin sayını qaytarır c.
String testString = "котёнок";
// символ ё встречается в четвёртой позиции (index = 3)
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start) Mövqeyindən başlayaraq indeksə baxırstart
String testString = "котёнок";
// вернёт -1, так How после 5 символа буквы ё нет
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string) Simvollar silsiləsi axtarırsubString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start)subStringMövqeyindən başlayaraq simvollar sətirini axtarırstart
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern () Sətri "hash" edir public boolean isEmpty () Sətin boş olub olmadığını yoxlayır
if(catname.isEmpty()) {
    // здесь ваш code
}
Bu üsul API 9-da (Android 2.1) ortaya çıxdı. Köhnə cihazlar üçün istifadə String.length() == 0 public int lastIndexOf (String string) и другие перегруженные версии Müəyyən edilmiş indeksdə son rast gəlinən mövqenin nömrəsini qaytarır. Məsələn, fayl adını belə uzadılmadan əldə edə bilərsiniz:
filename.toString().substring(0, filename.getString().lastIndexOf("."));
Bu nümunədə son nöqtənin mövqeyini alırıq və ondan əvvəl alt sətiri alırıq. public int length() Sətin uzunluğunu qaytarır
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length())); // возвращает 7 (семь символов)
public boolean matches(String regularExpression) Sətin normal ifadələrə uyğun olub olmadığını yoxlayır.
public int offsetByCodePoints (int index, int codePointOffset)
codePointOffsetParametrlə müəyyən edilmiş başlanğıc mövqeyindən sonra məsafədə yerləşən mövqeyi qaytarır.Metod index public boolean regionMatches (int thisStart, String string, int start, int length) sətirin müəyyən edilmiş hissəsini sətirin başqa hissəsi ilə müqayisə edir. Siz sinfin çağıran obyektinin sıra diapazonunun başlanğıcının indeksini təyin etməlisiniz String. Müqayisə ediləcək sətir parametrdə ötürülür string. Müqayisə aparılmalı olan simvolun indeksi parametrdə start, müqayisə ediləcək alt sətirin uzunluğu isə parametrdə ötürülür length. public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length) Həddindən artıq yüklənmiş versiya. Metod sətirin müəyyən edilmiş hissəsini sətirin başqa hissəsi ilə müqayisə edir, hərfi nəzərə almır. public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии Simvol və ya simvol ardıcıllığını targetdəyişdirirreplacement
String testString = "whale";
// меняем и на о
infoTextView.setText(testString.replace("And", "о")); // возвращается кот
public String replaceAll (String regularExpression, String replacement) public String replaceFirst (String regularExpression, String replacement) Normal ifadədən istifadə edərək ilk simvolları silir. Məsələn, 001, 007, 000024 nömrələrinin əvvəlindəki sıfırları silmək lazımdırsa, bu zəngdən istifadə edə bilərsiniz.
String s = "001234-cat";
String s = s.replaceFirst ("^0*", ""); // останется 1234-cat
public String[] split (String regularExpression) и другие перегруженные версии Sətiri sözlər massivinə ayırır. Məsələn, Vaska Ryzhik Murzik Barsik sətri var və biz bir sıra pişik adlarını əldə etmək istəyirik:
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");  // по пробелу
Biz əldə edirik:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix)prefixSətin əvvəlindən simvollarla başlayıb-başlamadığını yoxlayır
String str1 = "котлета";

if(str1.startsWith("кот"))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start)prefixVerilmiş sətirin təyin olunmuş mövqedəki simvollarla başlayıb-başlamadığını yoxlayır .
String str1 = "Суккот";

if(str1.startsWith("кот", 3))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end) Metodla oxşar substring(), lakin üçün istifadə edilə bilər CharSequence. public String substring(int start)və digər həddən artıq yükləmələr Verilmiş sətirdən mövqedən başlayaraq startsətrin sonuna/mövqeyindəki simvolla bitən simvollarla yeni ardıcıllıq/sətir yaradır end. Yeni sətirdə startsona qədər simvollar var - 1, ona görə də daha bir simvol götürürük.
String testString = "скотина";

infoTextView.setText(testString.substring(1, 4)); // возвращается кот
public char[] toCharArray() Bu sətirdəki simvolları simvol massivinə köçürür. Eyni nəticəni vasitəsilə əldə etmək olar getChars(). Sənədlər bu metoddan istifadə etməyi tövsiyə etmir, charAt().
String unusualCat = "Котёнок по имени Гав";

char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии Sətri kiçik hərflərə çevirir. Defolt yerli konversiyaya nəzarət edir. Simli pişik = "Pişik"; Sətir aşağı = cat.toLowerCase(); infoTextView.setText(aşağı); public String toString () Sətir qaytarır. Özü də artıq sim olan simin özü üçün simi qaytarmaq mənasızdır (oh, mən onu necə əymişəm). Amma bu üsul əslində digər siniflər üçün çox faydalıdır. public String toUpperCase() Sətri böyük hərflərə çevirir. Defolt yerli konversiyaya nəzarət edir.
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim() Sətin əvvəlində və sonunda boşluqları silir.
String str = "   Hello Kitty  ".trim();
infoTextView.setText(str);
public static String valueOf(long value)və digər həddən artıq yükləmələr Məzmunu (rəqəmlər, obyektlər, simvollar, simvol massivləri) sətirə çevirir.
int catAge = 7; // это число

infoTextView.setText(String.valueOf(catAge)); // преобразовано в строку

Təsadüfi bir sətir yaratmaq

Tutaq ki, bizə verilmiş simvolların təsadüfi sətri lazımdır.
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();
}

Simli müqayisə: equals()yoxsa ==?

Bir nümunəyə baxaq.
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;

infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
İki dəyişən eyni sözü ehtiva etsə də, biz iki fərqli obyektlə məşğul oluruq və operator false== qaytaracaq . Bir dəfə, ağaclar böyük olanda, müxtəlif mənbələrdən iki simi müqayisə etməli oldum. Simlər tam olaraq eyni görünsə də, operatordan istifadə edərək müqayisə saxta çıxdı və mənim üçün bütün kartları qarışdırdı. Və yalnız bundan sonra istifadə etməli olduğumu bildim . Java-da sətir ayrı bir obyektdir, başqa bir obyektlə eyni olmaya bilər, baxmayaraq ki, sətirin çıxışı ekranda eyni görünə bilər. Sadəcə olaraq Java, məntiqi operator vəziyyətində (həmçinin ) obyektlərə istinadları müqayisə edir (primitivlərlə işləyərkən belə problem yoxdur): ==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)));
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION