Kelas
String
adalah salah satu kelas yang paling banyak digunakan di Jawa. Artikel ini menyediakan beberapa soalan dan jawapan temu bual Java String yang penting. Mereka akan sangat membantu dalam mendapatkan gambaran lengkap tentang kelas dan akan menyediakan anda untuk sebarang soalan temuduga String
berkaitan kelas .String
1. Apakah String dalam Java? Apakah jenis data ini?
String ialah kelas dalam Java yang ditakrifkan dalam pakej java.lang. Ia bukan jenis data primitif seperti int dan long. Kelas String mewakili set aksara rentetan. String digunakan di hampir semua aplikasi Java dan terdapat beberapa fakta yang perlu kita ketahui tentang kelas String. Ia adalahimmutable
jenis data yang tidak boleh diubah ( ) dan dimuktamadkan dalam Java dan String
mesin maya menyimpan semua objek kelas dalam kumpulan rentetan. Ciri lain String
ialah cara untuk mendapatkan objek kelas String
menggunakan petikan berganda dan melebihkan pengendali "+" untuk penggabungan.
2. Apakah cara yang berbeza untuk mencipta objek String?
Kita boleh mencipta objek menggunakan operator baharu sama seperti kelas lain di Java atau kita boleh menggunakan petikan berganda untuk mencipta objekString
. Terdapat juga beberapa pembina kelas String
untuk mendapatkan rentetan daripada tatasusunan aksara, tatasusunan bait, dan juga menggunakan StringBuffer
atau StringBuilder
.
String str = new String("abc");
String str1 = "abc";
Apabila kita mencipta rentetan menggunakan petikan berganda, Mesin Maya Java melihat dalam kolam rentetan untuk rentetan lain dengan nilai yang sama. Jika rentetan ditemui, maka hanya rujukan kepada objek sedia ada kelas dikembalikan String
, jika tidak objek baharu dicipta dengan nilai yang diterima dan disimpan dalam kolam. Apabila kita menggunakan pengendali baharu, mesin maya mencipta objek String
tetapi tidak menyimpannya dalam kumpulan rentetan. Kita boleh menggunakan kaedah intern()
untuk menyimpan rentetan dalam kolam rentetan, atau dapatkan rujukan jika rentetan tersebut sudah ada dalam kolam.
3. Tulis kaedah untuk menyemak sama ada rentetan adalah palindrom.
Rentetan dipanggil palindrom jika ia membaca sama dalam kedua-dua arah. Sebagai contoh, "aba" ialah rentetan palindromik. KelasString
tidak menyediakan sebarang kaedah untuk menterbalikkan rentetan, tetapi kelas StringBuffer
mempunyai StringBuilder
kaedah membalikkan yang mana kita boleh menyemak sama ada rentetan kita ialah palindrom atau tidak.
private static boolean isPalindrome(String str) {
if (str == null)
return false;
StringBuilder strBuilder = new StringBuilder(str);
strBuilder.reverse();
return strBuilder.toString().equals(str);
}
Kadangkala penemuduga mungkin meminta untuk tidak menggunakan kelas lain untuk semakan ini, dalam hal ini kita boleh membandingkan aksara dalam rentetan pada kedua-dua belah untuk menyemak palindrom.
private static boolean isPalindromeString(String str) {
if (str == null)
return false;
int length = str.length();
System.out.println(length / 2);
for (int i = 0; i < length / 2; i++) {
if (str.charAt(i) != str.charAt(length - i - 1))
return false;
}
return true;
}
4. Tulis kaedah untuk mengeluarkan aksara yang diberikan daripada rentetan.
Kita boleh menggunakan kaedahreplaceAll
untuk menggantikan semua kejadian rentetan dengan rentetan lain. Ambil perhatian bahawa kaedah mengambil rentetan sebagai hujah, jadi kami menggunakan kelas Character
untuk mencipta rentetan daripada aksara dan menggunakannya untuk menggantikan semua aksara dengan rentetan kosong.
private static String removeChar(String str, char ch) {
if (str == null)
return null;
return str.replaceAll(Character.toString(ch), "");
}
5. Bagaimanakah kita boleh menukar rentetan kepada huruf besar atau huruf kecil?
Kita boleh menggunakan kaedah kelasString toUpperCase
untuk toLowerCace
mendapatkan rentetan huruf besar dan huruf kecil. Kaedah ini mempunyai beban berlebihan yang memerlukan hujah Locale
dan menggunakan peraturan penyetempatannya untuk menukar rentetan kepada huruf besar atau kecil.
6. Apakah yang dilakukan oleh kaedah subSequence?
Java 1.4 memperkenalkan antara mukaCharSequence
, kelas String
mewarisi antara muka ini dan itulah satu-satunya sebab untuk melaksanakan kaedah subSequence
dalam kelas String
. Secara dalaman ia memanggil substring
. Contoh mudah menggunakan kaedah:
public class StringSubsequence {
public static void main(String[] args) {
String str = "www.journaldev.com";
System.out.println("Last 4 char String: "+str.subSequence(str.length()-4, str.length()));
System.out.println("First 4 char String: "+str.subSequence(0, 4));
System.out.println("website name: "+str.subSequence(4, 14));
//substring vs subSequence
System.out.println("substring == subSequence ? "
+(str.substring(4, 14) == str.subSequence(4, 14)));
System.out.println("substring equals subSequence ? "
+(str.substring(4, 14).equals(str.subSequence(4, 14))));
}
}
Output program akan menunjukkan perkara berikut:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Sebaik-baiknya anda harus sentiasa menggunakan substring
.
7. Bagaimana untuk membandingkan dua rentetan dalam Java?
KelasString
mewarisi antara muka Comparable
dan mempunyai dua pilihan kaedah compareTo()
. Kaedah compareTo(String anotherString)
membandingkan objek String
dengan hujah yang diterima String
secara leksikografi. Jika baris semasa mendahului rentetan yang diterima, kaedah itu mengembalikan integer negatif, dan jika rentetan itu mengikuti hujah yang diterima, ia mengembalikan integer positif integer
. Jika kaedah mengembalikan 0, maka rentetan mempunyai nilai yang sama, dalam hal ini kaedah equals(String str)
juga akan kembali benar. compareToIgnoreCase(String str)
: Kaedah ini serupa dengan yang sebelumnya kecuali ia mengabaikan kes. Ia menggunakan CASE_INSENSITIVE_ORDER Comparator untuk perbandingan tidak peka huruf besar-besaran. Jika nilai pulangan adalah sifar, maka kaedah itu equalsIgnoreCase(String str)
juga akan kembali benar. Mari lihat contoh kecil untuk menerangkan kaedah ini:
public class StringCompareToExample {
public static void main(String[] args) {
String str = "ABC";
System.out.println(str.compareTo("DEF"));
System.out.println(str.compareToIgnoreCase("abc"));
}
}
Program ini akan mengeluarkan yang berikut:
-3
0
8. Bagaimana untuk menukar rentetan kepada aksara dan sebaliknya?
Ini ialah soalan muslihat kerana rentetan ialah urutan aksara, jadi kita hanya boleh menukarnya kepada satu aksara. Kita boleh menggunakan kaedahcharAt
untuk mendapatkan aksara yang terletak pada kedudukan yang ditentukan atau kita boleh menggunakan kaedah toCharArray()
untuk menukar rentetan kepada tatasusunan aksara. Contoh mudah yang menunjukkan cara menukar rentetan kepada aksara dan aksara kepada rentetan dalam Java.
import java.util.Arrays;
public class StringToCharToString {
public static void main(String[] args) {
//String to char array
String str = "123";
char[] chArr = str.toCharArray();
System.out.println("String to char array: "+Arrays.toString(chArr));
//String to char
char c = str.charAt(1);
System.out.println("String to char: "+c);
//char to String
String s = Character.toString(c);
System.out.println("char to String: "+s);
//удалить все заданные символы из строки
System.out.println("removing all chars from String: "
+removeCharFromString("1ABCD12DW", '1'));
}
private static String removeCharFromString(String str, char c) {
return str.replaceAll(Character.toString( c ), "");
}
}
Program ini akan mengeluarkan yang berikut:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW
9. Bagaimana untuk menukar rentetan kepada tatasusunan bait dan sebaliknya?
Kita boleh menggunakan kaedahgetBytes()
untuk menukar rentetan kepada tatasusunan bait dan kita boleh menggunakan pembina new String(byte[] arr)
untuk menukar tatasusunan bait kepada rentetan.
import java.util.Arrays;
public class StringByteArray {
public static void main(String[] args) {
String str = "www.journaldev.com";
//преобразование String в byte array
byte[] byteArr = str.getBytes();
System.out.println("String to byte array : "+Arrays.toString(byteArr));
//преобразование byte array и String
String str1 = new String(byteArr);
System.out.println("byte array to String : "+str1);
//посмотрим, str и str1 одинаковые or нет
System.out.println("str == str1? " + (str == str1));
System.out.println("str.equals(str1)? " + (str.equals(str1)));
}
}
Program ini akan mengeluarkan yang berikut:
String to byte array : [119, 119, 119, 46, 106, 111, 117, 114, 110, 97, 108, 100, 101, 118, 46, 99, 111, 109]
byte array to String : www.journaldev.com
str == str1? false
str.equals(str1)? true
10. Bolehkah kita menggunakan rentetan dalam binaan suis?
Soalan rumit ini digunakan untuk menguji pengetahuan anda tentang perkembangan bahasa semasa. Java 7 memanjangkan pernyataan suis untuk menggunakan rentetan; versi Java terdahulu tidak menyokong ini. Jika anda melaksanakan aliran bersyarat untuk rentetan, anda boleh menggunakan syarat if-else dan anda boleh menggunakan pernyataan suis jika anda menggunakan Java 7 atau lebih baru. Contoh kecil menggunakan rentetan dalam pernyataanswitch
dan kaedah lain yang menunjukkan logik yang sama menggunakan syarat if-else
.
public class SwitchStringExample {
public static void main(String[] args) {
printColorUsingSwitch("red");
printColorUsingIf("red");
// оператор switch регистрозависимый
printColorUsingSwitch("RED");
printColorUsingSwitch(null);
}
private static void printColorUsingIf(String color) {
if (color.equals("blue")) {
System.out.println("BLUE");
} else if (color.equals("red")) {
System.out.println("RED");
} else {
System.out.println("INVALID COLOR CODE");
}
}
private static void printColorUsingSwitch(String color) {
switch (color) {
case "blue":
System.out.println("BLUE");
break;
case "red":
System.out.println("RED");
break;
default:
System.out.println("INVALID COLOR CODE");
}
}
}
Program ini akan mengeluarkan yang berikut:
RED
RED
INVALID COLOR CODE
Exception in thread "main"
java.lang.NullPointerException
at com.journaldev.util.SwitchStringExample.printColorUsingSwitch(SwitchStringExample.java:24)
at com.journaldev.util.SwitchStringExample.main(SwitchStringExample.java:10)
Titik penggunaan utama switch
untuk rentetan dalam Java.
- menggunakan rentetan dalam reka bentuk
switch
menjadikan kod lebih mudah dibaca dengan menghapuskan berbilang rantaian syaratif-else
. - rentetan dalam adalah
switch
sensitif huruf besar-besaran, contoh di atas menunjukkan ini. - operator
switch
menggunakan kaedahString.equals()
untuk membandingkan nilai yang terhasil dengan nilai kes , jadi tambahkan semakan untuk NULL untuk mengelakkanNullPointerException
. - Menurut dokumentasi Java 7 untuk rentetan dalam
switch
, pengkompil Java menjana kod bait yang lebih cekap untuk rentetan dalam binaanswitch
berbanding untuk keadaan bercantumif-else
. - pastikan ini akan digunakan dengan Java 7 atau lebih baru, jika tidak, anda akan mendapat
xception
.
11. Tulis atur cara yang mencetak semua pilihatur rentetan.
Ini adalah soalan rumit dan kita perlu menggunakan rekursi untuk mencari semua pilih atur rentetan, contohnya pilih atur "AAB" boleh menjadi "AAB", "ABA" dan "BAA". Kita juga perlu menggunakan Set untuk memastikan kita tidak mempunyai baris pendua. Untuk mendapatkan semua pilih atur, kita mula-mula mengambil aksara pertama rentetan dan menyusun semula aksara yang tinggal. Jika String = “ABC” Aksara pertama aksara = A dan baki pilih atur BC dan CB. Sekarang kita boleh memasukkan aksara pertama ke dalam kedudukan yang tersedia dalam pilih atur. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Contoh program:import java.util.HashSet;
import java.util.Set;
public class StringHelper {
public static Set<String> permutationFinder(String str) {
Set<String> perm = new HashSet<String>();
//Handling error scenarios
if (str == null) {
return null;
} else if (str.length() == 0) {
perm.add("");
return perm;
}
char initial = str.charAt(0); // первый символ
String rem = str.substring(1); // полная строка без первого символа
Set<String> words = permutationFinder(rem);
for (String strNew : words) {
for (int i = 0;i<=strNew.length();i++){
perm.add(charInsert(strNew, initial, i));
}
}
return perm;
}
public static String charInsert(String str, char c, int j) {
String begin = str.substring(0, j);
String end = str.substring(j);
return begin + c + end;
}
public static void main(String[] args) {
String s = "AAC";
String s1 = "ABC";
String s2 = "ABCD";
System.out.println("\nPermutations for " + s + " are: \n" + permutationFinder(s));
System.out.println("\nPermutations for " + s1 + " are: \n" + permutationFinder(s1));
System.out.println("\nPermutations for " + s2 + " are: \n" + permutationFinder(s2));
}
}
Output program:
Permutations for AAC are:
[AAC, ACA, CAA]
Permutations for ABC are:
[ACB, ABC, BCA, CBA, CAB, BAC]
Permutations for ABCD are:
[DABC, CADB, BCAD, DBAC, BACD, ABCD, ABDC, DCBA, ADBC, ADCB, CBDA, CBAD, DACB, ACBD, CDBA, CDAB, DCAB, ACDB, DBCA, BDAC, CABD, BADC, BCDA, BDCA]
Sambungan artikel
GO TO FULL VERSION