- Kaedah
- Menjana rentetan rawak
- Perbandingan rentetan:
equals()
atau ==
?
Kelas ini
String
sangat kerap digunakan oleh pengaturcara, jadi ia harus dipelajari dengan baik.
Ingat bahawa objek kelas
String
tidak boleh diubah. Jadi apabila anda fikir anda menukar rentetan, anda sebenarnya mencipta rentetan baharu. Java mempunyai kelas khas
StringBuffer
dan
StringBuilder
membenarkan perubahan pada rentetan. Kelas
String
,
StringBuffer
,
StringBuilder
ditakrifkan 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
String
daripada objek kelas
StringBuffer
menggunakan
StringBuilder
pembina 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
$s
untuk rentetan atau
$d
untuk 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));
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));
public int codePointCount(int start, int end)
Mengira bilangan aksara Unicode antara kedudukan
start
dan
end
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar));
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("котёнок"));
}
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 dalam
CharSequence
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
Data
bermula 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
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);
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);
infoTextView.setText(strResult);
Untuk kegunaan huruf besar
%X
, maka
ff
ia 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) +
String.format(locale, "%tF\n", now) +
String.format(locale, "%tr\n", now) +
String.format(locale, "%tz\n", now) +
String.format(locale, "%tZ\n", now));
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 = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start)
Melihat indeks dari, bermula pada kedudukan
start
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string)
Mencari rentetan aksara
subString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start)
Mencari rentetan aksara
subString
bermula pada kedudukan
start
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()) {
}
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()));
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
codePointOffset
selepas 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
target
kepada
replacement
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*", "");
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
prefix
dari 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
prefix
pada 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
start
hingga penghujung baris/berakhir dengan aksara pada kedudukan
end
. Baris baharu mengandungi aksara dari
start
hingga 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));
GO TO FULL VERSION