JavaRush /Blog Java /Random-MS /Kelas rentetan
articles
Tahap

Kelas rentetan

Diterbitkan dalam kumpulan
  • Kaedah
  • Menjana rentetan rawak
  • Perbandingan rentetan: equals()atau ==?
Kelas ini Stringsangat kerap digunakan oleh pengaturcara, jadi ia harus dipelajari dengan baik. Rentetan Kelas - 1Ingat bahawa objek kelas Stringtidak boleh diubah. Jadi apabila anda fikir anda menukar rentetan, anda sebenarnya mencipta rentetan baharu. Java mempunyai kelas khas StringBufferdan StringBuildermembenarkan perubahan pada rentetan. Kelas String, StringBuffer, StringBuilderditakrifkan dalam pakej java.lang dan tersedia secara automatik tanpa pengisytiharan import. Ketiga-tiga kelas melaksanakan antara muka CharSequence. Mencipta rentetan adalah sangat mudah. Sebagai contoh, anda boleh melakukan ini:
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
Anda boleh membuat tatasusunan rentetan:
String[] cats = {"Васька", "Barsik", "Murzik"};
Anda boleh membuat objek kelas kosong String:
String str = new String();
Anda boleh membuat rentetan melalui tatasusunan aksara:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
Terdapat juga pembina yang membolehkan anda menetapkan julat tatasusunan aksara. Anda perlu menentukan permulaan julat dan bilangan aksara untuk digunakan:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
Anda boleh mencipta objek kelas Stringdaripada objek kelas StringBuffermenggunakan StringBuilderpembina berikut:
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)

Operator +dan += untukString

Di Jawa, tanda tambah ( +) bermaksud penggabungan rentetan, dengan kata lain, menggabungkan rentetan.
String cat = "Кот";
String name = "Васька";
//складываем две строки и пробел между ними, чтобы слова не слиплись
String fullname = cat + " " + name; // получится Кот Васька
Jika salah satu operan dalam ungkapan mengandungi rentetan, maka operan lain juga mestilah rentetan. Oleh itu, Java sendiri boleh menghantar pembolehubah kepada perwakilan rentetan, walaupun ia bukan rentetan.
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws; // хотя мы складываем число и строку, но все равно получим строку
За кулисами Java за нас преобразовало число 4 в строку "4"

Memformat rentetan

Katakan kita mempunyai sumber rentetan:
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
Untuk memaparkan rentetan ini secara pemrograman dalam elemen TextView, anda boleh menggunakan kod:
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
Bayangkan anda mempunyai beberapa ekor kucing. Anda boleh, sudah tentu, mempunyai talian anda sendiri untuk setiap kucing. Tetapi garisnya sangat serupa, hanya nama dan umur yang berubah. Anda juga boleh menukar bilangan cakar dan ekor (apa yang anda merokok?). Dalam kes sedemikian, anda boleh menggunakan pemformatan rentetan. Kita perlu menentukan perkataan yang akan kita ubah dan menggantikannya dengan set aksara khas yang bermula dengan simbol peratus, kemudian nombor bertambah dengan satu, kemudian $suntuk rentetan atau $duntuk nombor. Jadi mari kita tukar sumber rentetan kita seperti ini:
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
Mari buat perubahan pada kod:
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);
Jika anda mempunyai kucing Vaska dan dia berumur enam tahun, kemudian tambah dua pembolehubah dan format baris
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Berikut ialah contoh pemformatan mudah. Ingat tentangnya dan gunakannya di tempat yang betul.

Sumber rentetan

Adalah dinasihatkan untuk menyimpan rentetan dalam sumber. Mengakses sumber rentetan secara pemrograman dilakukan seperti ini:
String catName = getResources().getString(R.string.barsik);

Ekstrak rentetan daripada tatasusunan rentetan dalam sumber

Katakan anda mempunyai tatasusunan rentetan yang ditakrifkan dalam fail strings.xml yang dipanggil cats_array. Kemudian anda boleh mengakses baris daripada sumber seperti ini:
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);

Kaedah

public char charAt (int index) Mengembalikan aksara pada offset yang ditentukan dalam rentetan ini. Kira detik bermula dari 0. Tidak perlu menggunakan nilai negatif dan tidak wujud, lebih serius. Untuk mengekstrak berbilang aksara gunakan getChars().
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar)); // выводит третий символ - т
public int codePointAt(int index) Mengembalikan aksara Unicode pada indeks yang diberikan
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointBefore(int index) Mengembalikan aksara Unicode yang mendahului indeks yang diberikan
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointCount(int start, int end) Mengira bilangan aksara Unicode antara kedudukan startdanend
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar)); // возвращает 3
public int compareTo(String string) Membandingkan rentetan yang ditentukan menggunakan nilai aksara Unicode dan mengira rentetan yang kurang daripada, sama dengan atau lebih besar daripada rentetan seterusnya. Boleh digunakan untuk menyusun. Kes diambil kira. Jika rentetan sepadan, maka 0 dikembalikan, jika kurang daripada sifar, maka rentetan panggilan adalah kurang daripada rentetan string, jika lebih besar daripada sifar, maka rentetan panggilan lebih besar daripada rentetan string. Perkataan huruf besar diletakkan di atas perkataan huruf kecil.
String testString = "Котёнок";

if (testString.compareTo("котёнок") == 0) {
    tvInfo.setText("Строки равны");
} else {
    tvInfo.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок")); // возвращает -32
}
Mari kita mengisih tatasusunan rentetan menggunakan isihan gelembung.
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]);
}
Hasilnya kami mendapat:
Мы
везём
кота
с
собой
Seperti yang anda lihat, menukar tempat istilah tidak mengubah jumlah isihan kucing. public int compareToIgnoreCase (String string) Membandingkan rentetan yang ditentukan menggunakan nilai aksara Unicode, tidak sensitif kepada huruf besar.
String testString = "Котёнок";

if (testString.compareToIgnoreCase("котёнок") == 0) {
    tv.setText("Строки равны"); // слова одинаковы, если не учитывать регистр
} else {
    tv.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок"));
}
public String concat (String string) Menggabungkan rentetan dengan rentetan yang ditentukan. Rentetan baharu dikembalikan yang mengandungi gabungan dua rentetan itu. Perhatikan bahawa nama kaedah itu sendiri mengandungi kucing!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
Kaedah melaksanakan fungsi yang sama seperti pengendali +dan boleh ditulis Сук + кот. Tetapi orang kucing sebenar akan menggunakan kaedah "kucing". public boolean contains (CharSequence cs) Menentukan sama ada rentetan mengandungi jujukan aksara dalamCharSequence
String testString = "котёнок";

if(testString.contains("кот")){
    infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length) Mencipta rentetan baharu yang mengandungi aksara yang ditentukan daripada tatasusunan Databermula pada kedudukan start(penomboran berasaskan sifar) panjang panjang . public static String copyValueOf(char[] data) Mencipta rentetan baharu yang mengandungi aksara daripada tatasusunan yang ditentukan. Menukar tatasusunan selepas baris dibuat tidak mengubah baris yang dibuat. public boolean endsWith(String suffix) Menyemak sama ada rentetan berakhir dengan suffix.
String str1 = "Суккот";

if(str1.endsWith("кот"))
    infoTextView.setText("Слово заканчивается на котике");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string) Membandingkan objek yang ditentukan dan rentetan dan mengembalikan benar jika rentetan yang dibandingkan adalah sama, i.e. mengandungi aksara yang sama dan dalam susunan sensitif huruf besar yang sama.
String str1 = "Кот";
String str2 = "Кошка";

if(str1.equals(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
Kaedah ini tidak boleh dikelirukan dengan operator ==, yang membandingkan dua rujukan objek dan menentukan sama ada ia merujuk kepada contoh yang sama. Lihat Perbandingan Rentetan: equals()atau ==? public boolean equalsIgnoreCase(String string) Membandingkan rentetan yang ditentukan dengan rentetan sumber dalam cara yang tidak sensitif huruf besar dan mengembalikan benar jika ia sama. Julat AZ dianggap sama dengan julat az.
String str1 = "Кот";
String str2 = "кот";

if(str1.equalsIgnoreCase(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
Mengembalikan rentetan berformat menggunakan format yang dibekalkan dan argumen yang disetempatkan pada skop yang diberikan. Contohnya tarikh atau masa
// выводим число типа float с двумя знаками после запятой
String.format("%.2f", floatValue);
Kami melekatkan dua perkataan yang muncul pada baris baharu. Dalam kes ini, perkataan kedua dipaparkan dalam huruf besar.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
// выводим результат в TextView
infoTextView.setText(strResult);
Tukar nombor kepada sistem perlapanan.
String str1 = "8";
int inInt = Integer.parseInt(str1); // конвертируем строку в число
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);

infoTextView.setText(strResult);
Dengan analogi, kami memaparkan dalam sistem perenambelasan
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
// число 255 будет выведено How ff
infoTextView.setText(strResult);
Untuk kegunaan huruf besar %X, maka ffia akan menjadi FF. Untuk kegunaan sistem perpuluhan %d. Tarikh juga boleh dipaparkan dalam cara yang berbeza.
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) Mengembalikan rentetan yang diformat menggunakan format yang dibekalkan. public void getBytes(int start, int end, byte[] data, int index)dan lebihan lain Kaedah menyimpan aksara ke dalam tatasusunan bait, alternatif kepada getChars(). Selalunya digunakan apabila mengeksport rentetan daripada pelbagai sumber yang menggunakan aksara Unicode lain. Sebagai contoh, Java secara lalai berfungsi dengan aksara Unicode 16-bit, dan di Internet, rentetan sering menggunakan Unicode 8-bit, ASCII, dsb. public void getChars(int start, int end, char[] buffer, int index) Kaedah untuk mengekstrak berbilang aksara daripada rentetan. Anda perlu menentukan indeks permulaan subrentetan ( start), indeks aksara berikutan akhir subrentetan untuk diekstrak ( end ). Tatasusunan yang menerima aksara yang dipilih adalah dalam parameter penimbal . Indeks dalam tatasusunan, bermula dari mana subrentetan akan ditulis, diluluskan dalam parameter indeks . Pastikan tatasusunan cukup besar untuk mengandungi semua aksara dalam subrentetan yang ditentukan.
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() Mengembalikan integer yang merupakan kod cincang untuk objek ini. public int indexOf(int c) Mengembalikan nombor kedudukan pertama ditemui dengan indeks yang ditentukan c.
String testString = "котёнок";
// символ ё встречается в четвёртой позиции (index = 3)
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start) Melihat indeks dari, bermula pada kedudukanstart
String testString = "котёнок";
// вернёт -1, так How после 5 символа буквы ё нет
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string) Mencari rentetan aksarasubString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start) Mencari rentetan aksara subStringbermula pada kedudukanstart
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern () "Hashes" rentetan public boolean isEmpty () Semak sama ada rentetan itu kosong
if(catname.isEmpty()) {
    // здесь ваш code
}
Kaedah ini muncul dalam API 9 (Android 2.1). Untuk peranti yang lebih lama, gunakan String.length() == 0 public int lastIndexOf (String string) и другие перегруженные версии Mengembalikan nombor kedudukan terakhir ditemui pada indeks yang ditentukan. Sebagai contoh, anda boleh mendapatkan nama fail tanpa sambungan seperti ini:
filename.toString().substring(0, filename.getString().lastIndexOf("."));
Dalam contoh ini, kita mendapat kedudukan titik terakhir dan mendapatkan subrentetan sebelum itu. public int length() Mengembalikan panjang rentetan
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length())); // возвращает 7 (семь символов)
public boolean matches(String regularExpression) Menyemak sama ada rentetan sepadan dengan ungkapan biasa.
public int offsetByCodePoints (int index, int codePointOffset)
Mengembalikan kedudukan yang terletak pada jarak codePointOffsetselepas kedudukan permulaan yang ditentukan oleh parameter. index public boolean regionMatches (int thisStart, String string, int start, int length) Kaedah membandingkan bahagian rentetan yang ditentukan dengan bahagian rentetan yang lain. Anda mesti menentukan indeks permulaan julat baris objek panggilan kelas String. Rentetan yang hendak dibandingkan dihantar dalam parameter string. Indeks watak yang bermula dari mana perbandingan perlu dilakukan diluluskan dalam parameter start, dan panjang subrentetan untuk dibandingkan diluluskan dalam parameter length. public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length) Versi terlebih muatan. Kaedah membandingkan bahagian rentetan yang ditentukan dengan bahagian rentetan yang lain, mengabaikan kes. public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии Menukar aksara atau urutan aksara targetkepadareplacement
String testString = "whale";
// меняем и на о
infoTextView.setText(testString.replace("And", "о")); // возвращается кот
public String replaceAll (String regularExpression, String replacement) public String replaceFirst (String regularExpression, String replacement) Mengalih keluar aksara pertama menggunakan ungkapan biasa. Contohnya, jika anda perlu mengalih keluar sifar pada permulaan nombor 001, 007, 000024, maka anda boleh menggunakan panggilan ini.
String s = "001234-cat";
String s = s.replaceFirst ("^0*", ""); // останется 1234-cat
public String[] split (String regularExpression) и другие перегруженные версии Membahagikan rentetan kepada susunan perkataan. Sebagai contoh, terdapat rentetan Vaska Ryzhik Murzik Barsik dan kami ingin mendapatkan pelbagai nama kucing:
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");  // по пробелу
Kita mendapatkan:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix) Menyemak sama ada rentetan bermula dengan aksara prefixdari permulaan rentetan
String str1 = "котлета";

if(str1.startsWith("кот"))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start) Menyemak sama ada rentetan yang diberikan bermula dengan aksara prefixpada kedudukan yang ditentukan.
String str1 = "Суккот";

if(str1.startsWith("кот", 3))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end) Sama dengan kaedah substring(), tetapi boleh digunakan untuk CharSequence. public String substring(int start)dan beban lampau lain Mencipta urutan/rentetan baharu dengan aksara daripada rentetan yang diberikan bermula pada kedudukan starthingga penghujung baris/berakhir dengan aksara pada kedudukan end. Baris baharu mengandungi aksara dari starthingga akhir - 1, jadi kami mengambil satu aksara lagi.
String testString = "скотина";

infoTextView.setText(testString.substring(1, 4)); // возвращается кот
public char[] toCharArray() Menyalin aksara dalam rentetan ini kepada tatasusunan aksara. Keputusan yang sama boleh diperolehi melalui getChars(). Dokumentasi tidak mengesyorkan menggunakan kaedah ini, mencadangkan charAt().
String unusualCat = "Котёнок по имени Гав";

char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии Menukar rentetan kepada huruf kecil. Tempat lalai mengawal penukaran. String cat = "Kucing"; Rentetan bawah = cat.toLowerCase(); infoTextView.setText(lower); public String toString () Mengembalikan rentetan. Untuk rentetan itu sendiri, yang dengan sendirinya sudah menjadi rentetan, mengembalikan rentetan adalah sia-sia (oh, bagaimana saya membengkokkannya). Tetapi kaedah ini sebenarnya sangat berguna untuk kelas lain. public String toUpperCase() Menukar rentetan kepada huruf besar. Tempat lalai mengawal penukaran.
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim() Mengalih keluar ruang pada permulaan dan penghujung rentetan.
String str = "   Hello Kitty  ".trim();
infoTextView.setText(str);
public static String valueOf(long value)dan lebihan lain Menukar kandungan (nombor, objek, aksara, tatasusunan aksara) kepada rentetan.
int catAge = 7; // это число

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

Menjana rentetan rawak

Katakan kita memerlukan rentetan rawak aksara yang diberikan.
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();
}

Perbandingan rentetan: equals()atau ==?

Mari kita lihat contoh.
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;

infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
Walaupun kedua-dua pembolehubah mengandungi perkataan yang sama, kami berurusan dengan dua objek berbeza dan operator ==akan mengembalikan false . Sekali, apabila pokok itu besar, saya perlu membandingkan dua rentetan daripada sumber yang berbeza. Walaupun rentetan kelihatan betul-betul sama, perbandingan menggunakan operator ==mengembalikan palsu dan mengelirukan semua kad untuk saya. Dan barulah saya mengetahui bahawa saya perlu menggunakan equals(). Rentetan dalam Java ialah objek berasingan yang mungkin tidak sama dengan objek lain, walaupun output rentetan mungkin kelihatan sama pada skrin. Cuma Java, dalam kes pengendali logik ==(serta !=), membandingkan rujukan kepada objek (tidak ada masalah sedemikian apabila bekerja dengan primitif):
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)));
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION