articles
Level 15

Kelas tali

Dipublikasikan di grup Random-ID
  • Metode
  • Menghasilkan string acak
  • Perbandingan string: equals()atau ==?
Kelas ini Stringsangat sering digunakan oleh programmer, sehingga harus dipelajari dengan baik. String Kelas - 1Ingatlah bahwa objek kelas Stringtidak dapat diubah. Jadi ketika Anda berpikir Anda sedang mengubah sebuah string, Anda sebenarnya sedang membuat string baru. Java memiliki kelas khusus StringBufferdan StringBuildermemungkinkan perubahan pada string. Kelas String, StringBuffer, StringBuilderdidefinisikan dalam paket java.lang dan tersedia secara otomatis tanpa deklarasi impor. Ketiga kelas mengimplementasikan antarmuka CharSequence. Membuat string sangat sederhana. Misalnya, Anda dapat melakukan ini:
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
Anda dapat membuat array string:
String[] cats = {"Васька", "Barsik", "Murzik"};
Anda dapat membuat objek kelas kosong String:
String str = new String();
Anda dapat membuat string melalui array karakter:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
Ada juga konstruktor yang memungkinkan Anda mengatur rentang array karakter. Anda perlu menentukan awal rentang dan jumlah karakter yang akan digunakan:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
Anda dapat membuat objek kelas Stringdari objek kelas StringBuffermenggunakan StringBuilderkonstruktor berikut:
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)

Operator +dan += untukString

Di Java, tanda tambah ( +) berarti penggabungan string, dengan kata lain menggabungkan string.
String cat = "Кот";
String name = "Васька";
//складываем две строки и пробел между ними, чтобы слова не слиплись
String fullname = cat + " " + name; // получится Кот Васька
Jika salah satu operan dalam suatu ekspresi berisi string, maka operan lainnya juga harus berupa string. Oleh karena itu, Java sendiri dapat memasukkan variabel ke representasi string, meskipun variabel tersebut bukan string.
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws; // хотя мы складываем число и строку, но все равно получим строку
За кулисами Java за нас преобразовало число 4 в строку "4"

Memformat string

Anggaplah kita memiliki sumber daya string:
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
Untuk menampilkan string ini secara terprogram di elemen TextView, Anda dapat menggunakan kode:
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
Bayangkan Anda mempunyai beberapa kucing. Tentu saja Anda dapat memiliki garis sendiri untuk setiap kucing. Namun garisnya sangat mirip, hanya nama dan umurnya saja yang berubah. Anda juga dapat mengubah jumlah kaki dan ekornya (apa yang Anda hisap?). Dalam kasus seperti ini, Anda dapat menerapkan pemformatan string. Kita perlu menentukan kata-kata yang akan kita ubah dan menggantinya dengan sekumpulan karakter khusus yang dimulai dengan simbol persen, lalu angka bertambah satu, lalu $suntuk string atau $dangka. Jadi mari kita ubah sumber daya string kita seperti ini:
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
Mari kita ubah kodenya:
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 memiliki kucing Vaska dan dia berumur enam tahun, tambahkan dua variabel dan format garisnya
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Berikut ini contoh pemformatan sederhana. Ingatlah dan gunakan di tempat yang tepat.

Sumber daya string

Dianjurkan untuk menyimpan string dalam sumber daya. Mengakses sumber daya string secara terprogram dilakukan seperti ini:
String catName = getResources().getString(R.string.barsik);

Ekstrak string dari array string di sumber daya

Katakanlah Anda memiliki array string yang ditentukan dalam file strings.xml bernama cats_array. Kemudian Anda dapat mengakses baris dari sumber daya seperti ini:
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);

Metode

public char charAt (int index) Mengembalikan karakter pada offset yang ditentukan dalam string ini. Hitung mundur dimulai dari 0. Tidak perlu menggunakan nilai negatif dan tidak ada, lebih serius lagi. Untuk mengekstrak banyak karakter, gunakan getChars().
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar)); // выводит третий символ - т
public int codePointAt(int index) Mengembalikan karakter Unicode pada indeks yang diberikan
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointBefore(int index) Mengembalikan karakter Unicode yang mendahului indeks tertentu
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointCount(int start, int end) Menghitung jumlah karakter Unicode antara posisi startdanend
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar)); // возвращает 3
public int compareTo(String string) Membandingkan string yang ditentukan menggunakan nilai karakter Unicode dan menghitung string mana yang lebih kecil, sama dengan, atau lebih besar dari string berikutnya. Dapat digunakan untuk menyortir. Kasus diperhitungkan. Jika string cocok, maka 0 dikembalikan, jika kurang dari nol, maka string pemanggil lebih kecil dari string string, jika lebih besar dari nol, maka string pemanggil lebih besar dari string string. Kata dengan huruf besar ditempatkan di atas kata dengan huruf kecil.
String testString = "Котёнок";

if (testString.compareTo("котёнок") == 0) {
    tvInfo.setText("Строки равны");
} else {
    tvInfo.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок")); // возвращает -32
}
Mari kita urutkan array string menggunakan bubble sort.
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 kita mendapatkan:
Мы
везём
кота
с
собой
Seperti yang Anda lihat, mengubah tempat suku tidak mengubah jumlah penyortiran kucing. public int compareToIgnoreCase (String string) Membandingkan string yang ditentukan menggunakan nilai karakter Unicode, tidak peka terhadap huruf besar-kecil.
String testString = "Котёнок";

if (testString.compareToIgnoreCase("котёнок") == 0) {
    tv.setText("Строки равны"); // слова одинаковы, если не учитывать регистр
} else {
    tv.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок"));
}
public String concat (String string) Menggabungkan string dengan string yang ditentukan. Sebuah string baru dikembalikan yang berisi gabungan dua string. Perhatikan bahwa nama metode itu sendiri mengandung kucing!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
Metode ini menjalankan fungsi yang sama dengan operator +dan dapat ditulis Сук + кот. Namun pecinta kucing sejati akan menggunakan metode "kucing". public boolean contains (CharSequence cs) Menentukan apakah suatu string berisi urutan karakter di dalamnyaCharSequence
String testString = "котёнок";

if(testString.contains("кот")){
    infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length) Membuat string baru yang berisi karakter tertentu dari array Datayang dimulai dari posisi start(penomoran berbasis nol) dengan panjang length . public static String copyValueOf(char[] data) Membuat string baru yang berisi karakter dari array yang ditentukan. Mengubah array setelah baris dibuat tidak mengubah baris yang dibuat. public boolean endsWith(String suffix) Memeriksa apakah suatu string diakhiri dengan suffix.
String str1 = "Суккот";

if(str1.endsWith("кот"))
    infoTextView.setText("Слово заканчивается на котике");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string) Membandingkan objek yang ditentukan dan string dan mengembalikan nilai true jika string yang dibandingkan sama, mis. berisi karakter yang sama dan dalam urutan peka huruf besar-kecil yang sama.
String str1 = "Кот";
String str2 = "Кошка";

if(str1.equals(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
Metodenya berbeda dengan operator ==, yang membandingkan dua referensi objek dan menentukan apakah keduanya merujuk ke instance yang sama. Lihat Perbandingan String: equals()atau ==? public boolean equalsIgnoreCase(String string) Membandingkan string yang ditentukan dengan string sumber dengan cara yang tidak peka huruf besar-kecil dan mengembalikan nilai true jika keduanya sama. Rentang AZ dianggap sama dengan rentang 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 string yang diformat menggunakan format yang disediakan dan argumen yang dilokalkan ke cakupan tertentu. Misalnya tanggal atau waktu
// выводим число типа float с двумя знаками после запятой
String.format("%.2f", floatValue);
Kami merekatkan dua kata yang muncul di baris baru. Dalam hal ini, kata kedua ditampilkan dalam huruf besar.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
// выводим результат в TextView
infoTextView.setText(strResult);
Ubahlah bilangan tersebut menjadi sistem oktal.
String str1 = "8";
int inInt = Integer.parseInt(str1); // конвертируем строку в число
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);

infoTextView.setText(strResult);
Dengan analogi, kami menampilkannya dalam sistem heksadesimal
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
// число 255 будет выведено How ff
infoTextView.setText(strResult);
Untuk penggunaan huruf besar %X, maka ffakan menjadi FF. Untuk penggunaan sistem desimal %d. Tanggal juga dapat ditampilkan dengan berbagai cara.
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 string yang diformat menggunakan format yang disediakan. public void getBytes(int start, int end, byte[] data, int index)dan kelebihan beban lainnya Metode ini menyimpan karakter ke dalam array byte, sebuah alternatif dari array getChars(). Sering digunakan saat mengekspor string dari berbagai sumber yang menggunakan karakter Unicode lain. Misalnya, Java secara default bekerja dengan karakter Unicode 16-bit, dan di Internet, string sering kali menggunakan Unicode 8-bit, ASCII, dll. public void getChars(int start, int end, char[] buffer, int index) Metode untuk mengekstraksi banyak karakter dari sebuah string. Anda perlu menentukan indeks awal substring ( start), indeks karakter setelah akhir substring yang akan diekstraksi ( end ). Array yang menerima karakter yang dipilih ada di parameter buffer . Indeks dalam array, mulai dari mana substring akan ditulis, diteruskan dalam parameter indeks . Pastikan array cukup besar untuk menampung semua karakter dalam substring 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 bilangan bulat yang merupakan kode hash untuk objek ini. public int indexOf(int c) Mengembalikan nomor posisi yang pertama kali ditemui dengan indeks yang ditentukan c.
String testString = "котёнок";
// символ ё встречается в четвёртой позиции (index = 3)
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start) Mencari indeks dari, mulai dari posisistart
String testString = "котёнок";
// вернёт -1, так How после 5 символа буквы ё нет
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string) Mencari serangkaian karaktersubString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start) Mencari string karakter subStringyang dimulai dari posisistart
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern () "Hash" sebuah string public boolean isEmpty () Memeriksa apakah string tersebut kosong
if(catname.isEmpty()) {
    // здесь ваш code
}
Metode ini muncul di API 9 (Android 2.1). Untuk perangkat yang lebih lama, gunakan String.length() == 0 public int lastIndexOf (String string) и другие перегруженные версии Mengembalikan jumlah posisi yang terakhir ditemukan pada indeks yang ditentukan. Misalnya, Anda bisa mendapatkan nama file tanpa ekstensi seperti ini:
filename.toString().substring(0, filename.getString().lastIndexOf("."));
Dalam contoh ini, kita mendapatkan posisi titik terakhir dan mendapatkan substring sebelumnya. public int length() Mengembalikan panjang string
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length())); // возвращает 7 (семь символов)
public boolean matches(String regularExpression) Memeriksa apakah suatu string cocok dengan ekspresi reguler.
public int offsetByCodePoints (int index, int codePointOffset)
Mengembalikan posisi yang terletak pada jarak codePointOffsetsetelah posisi awal yang ditentukan oleh parameter. index public boolean regionMatches (int thisStart, String string, int start, int length) Metode ini membandingkan bagian string yang ditentukan dengan bagian string lainnya. Anda harus menentukan indeks awal rentang baris objek pemanggil kelas String. String yang akan dibandingkan dilewatkan dalam parameter string. Indeks karakter yang mulai dari mana perbandingan perlu dilakukan diteruskan dalam parameter start, dan panjang substring yang akan dibandingkan diteruskan dalam parameter length. public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length) Versi kelebihan beban. Metode ini membandingkan bagian tertentu dari sebuah string dengan bagian lain dari string tersebut, mengabaikan huruf besar/kecil. public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии Mengubah karakter atau urutan karakter targetmenjadireplacement
String testString = "whale";
// меняем и на о
infoTextView.setText(testString.replace("And", "о")); // возвращается кот
public String replaceAll (String regularExpression, String replacement) public String replaceFirst (String regularExpression, String replacement) Menghapus karakter pertama menggunakan ekspresi reguler. Misalnya, jika Anda perlu menghilangkan angka nol di awal angka 001, 007, 000024, Anda dapat menggunakan panggilan ini.
String s = "001234-cat";
String s = s.replaceFirst ("^0*", ""); // останется 1234-cat
public String[] split (String regularExpression) и другие перегруженные версии Memisahkan string menjadi serangkaian kata. Misalnya, ada string Vaska Ryzhik Murzik Barsik dan kami ingin mendapatkan serangkaian nama kucing:
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");  // по пробелу
Kita mendapatkan:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix) Memeriksa apakah string dimulai dengan karakter prefixdari awal string
String str1 = "котлета";

if(str1.startsWith("кот"))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start) Memeriksa apakah string yang diberikan dimulai dengan karakter prefixpada posisi yang ditentukan.
String str1 = "Суккот";

if(str1.startsWith("кот", 3))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end) Mirip dengan metodenya substring(), tetapi dapat digunakan untuk CharSequence. public String substring(int start)dan kelebihan lainnya Membuat urutan/string baru dengan karakter dari string tertentu dimulai dari posisi starthingga akhir baris/diakhiri dengan karakter di posisi end. Baris baru berisi karakter dari startsampai akhir - 1, jadi kita ambil satu karakter lagi.
String testString = "скотина";

infoTextView.setText(testString.substring(1, 4)); // возвращается кот
public char[] toCharArray() Menyalin karakter dalam string ini ke array karakter. Hasil yang sama dapat diperoleh melalui getChars(). Dokumentasi tidak merekomendasikan penggunaan metode ini, menyarankan metode charAt().
String unusualCat = "Котёнок по имени Гав";

char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии Mengonversi string menjadi huruf kecil. Lokal default mengontrol konversi. String kucing = "Kucing"; String lebih rendah = cat.toLowerCase(); infoTextView.setText(lebih rendah); public String toString () Mengembalikan string. Untuk string itu sendiri, yang sudah menjadi string, mengembalikan string itu tidak ada gunanya (oh, betapa saya membengkokkannya). Namun cara ini sebenarnya sangat berguna untuk kelas lain. public String toUpperCase() Mengonversi string menjadi huruf besar. Lokal default mengontrol konversi.
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim() Menghapus spasi di awal dan akhir string.
String str = "   Hello Kitty  ".trim();
infoTextView.setText(str);
public static String valueOf(long value)dan kelebihan lainnya Mengonversi konten (angka, objek, karakter, array karakter) menjadi string.
int catAge = 7; // это число

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

Menghasilkan string acak

Katakanlah kita membutuhkan string acak dari karakter tertentu.
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 string: equals()atau ==?

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

infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
Meskipun kedua variabel berisi kata yang sama, kita berhadapan dengan dua objek berbeda dan operator ==akan mengembalikan false . Suatu ketika, ketika pohonnya masih besar, saya perlu membandingkan dua string dari sumber berbeda. Meskipun senarnya terlihat persis sama, perbandingan menggunakan operator ==menghasilkan hasil yang salah dan membingungkan semua kartu bagi saya. Dan baru pada saat itulah saya mengetahui bahwa saya perlu menggunakan file equals(). String di Java adalah objek terpisah yang mungkin tidak sama dengan objek lain, meskipun output dari string tersebut mungkin terlihat sama di layar. Hanya saja Java, dalam kasus operator logika ==(dan juga !=), membandingkan referensi ke objek (tidak ada masalah seperti itu saat 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)));
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION