Класс
String
Java тіліндегі ең көп қолданылатын сыныптардың бірі болып табылады. Бұл мақалада маңызды Java String сұхбат сұрақтары мен жауаптары берілген. Олар сыныптың толық бейнесін алуға өте пайдалы болады String
және сізді сыныпқа қатысты кез келген сұхбат сұрағына дайындайды String
.
1. Java тіліндегі String дегеніміз не? Бұл қандай деректер түрі?
Жол – Java.lang бумасында анықталған Java тіліндегі класс. Бұл int және long сияқты қарапайым деректер түрі емес. String класы жол таңбалар жиынын білдіреді. Жолдар барлық дерлік Java қолданбаларында қолданылады және String класы туралы білуіміз керек бірнеше фактілер бар. Бұлimmutable
Java тіліндегі өзгермейтін ( ) және аяқталған деректер түрі және String
виртуалды машина сыныптың барлық нысандарын жолдық пулда сақтайды. Тағы бір мүмкіндік - қос тырнақшаларды пайдаланып және біріктіру үшін «+» операторын шамадан тыс жүктеу арқылы String
сынып нысандарын алу тәсілі .String
2. String an objectісін құрудың қандай тәсілдері бар?
Біз Java тіліндегі кез келген басқа класс сияқты new операторының көмегімен нысандар жасай аламыз немесе нысанды жасау үшін қос тырнақшаларды пайдалана аламызString
. String
Сондай-ақ таңбалар массивінен, byte массивінен жолды алу үшін, сондай-ақ StringBuffer
немесе пайдалану үшін бірнеше класс конструкторлары бар StringBuilder
.
String str = new String("abc");
String str1 = "abc";
Қос тырнақшаларды пайдаланып жолды жасағанда, Java виртуалды машинасы жол пулында бірдей мәнге ие басқа жолды іздейді. Егер жол табылса, сыныптың бар нысанына сілтеме ғана қайтарылады String
, әйтпесе алынған мәнмен жаңа нысан жасалады және пулда сақталады. Жаңа операторды пайдаланған кезде виртуалды машина нысан жасайды, String
бірақ оны жол пулында сақтамайды. Біз жолды жол пулында сақтау үшін әдісті пайдалана аламыз intern()
немесе мұндай жол пулда бұрыннан бар болса, анықтаманы ала аламыз.
3. Жолдың палиндром екенін тексеру әдісін жазыңыз.
Жол екі бағытта бірдей оқылатын болса, ол палиндром деп аталады. Мысалы, «aba» - палиндромдық жол. КлассString
жолды кері айналдырудың ешқандай әдісін қамтамасыз етпейді, бірақ сыныптарда біздің жолымыздың палиндром екенін немесе жоқтығын тексеруге болатын кері қайтару әдісі бар StringBuffer
.StringBuilder
private static boolean isPalindrome(String str) {
if (str == null)
return false;
StringBuilder strBuilder = new StringBuilder(str);
strBuilder.reverse();
return strBuilder.toString().equals(str);
}
Кейде интервьюер бұл тексеру үшін басқа сыныптарды қолданбауды сұрауы мүмкін, бұл жағдайда палиндром бар-жоғын тексеру үшін екі жақтағы жолдағы таңбаларды салыстыра аламыз.
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. Жолдан берілген символды жою әдісін жазыңыз.
replaceAll
Біз жолдың барлық көріністерін басқа жолмен ауыстыру әдісін пайдалана аламыз . Әдіс жолды аргумент ретінде қабылдайтынын ескеріңіз, сондықтан біз Character
таңбадан жол жасау үшін классты қолданамыз және оны бос жолмен барлық таңбаларды ауыстыру үшін қолданамыз.
private static String removeChar(String str, char ch) {
if (str == null)
return null;
return str.replaceAll(Character.toString(ch), "");
}
5. Жолды үлкен немесе кіші әріпке қалай түрлендіруге болады?
Біз үлкен және кіші әріпті жолдарды алуString toUpperCase
үшін класс әдістерін пайдалана аламыз . toLowerCace
Бұл әдістерде аргумент қабылдайтын Locale
және жолды үлкен немесе кіші әріпке түрлендіру үшін локализация ережелерін пайдаланатын шамадан тыс жүктеме бар.
6. SubSequence әдісі не істейді?
Java 1.4 интерфейсті енгіздіCharSequence
, класс осы интерфейсті мұра етеді және бұл сыныпта String
әдісті енгізудің жалғыз себебі . Ішкі ол деп атайды . Әдісті қолданудың қарапайым мысалы: subSequence
String
substring
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))));
}
}
Бағдарламаның шығысы келесіні көрсетеді:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Ең дұрысы сіз әрқашан пайдалануыңыз керек substring
.
7. Java тіліндегі екі жолды қалай салыстыруға болады?
КлассString
интерфейсті иеленеді Comparable
және екі әдіс опциясы бар compareTo()
. Әдіс compareTo(String anotherString)
an objectіні String
алынған аргументпен String
лексикографиялық түрде салыстырады. Ағымдағы жол қабылданған жолдың алдында болса, әдіс теріс бүтін санды қайтарады, ал егер жол қабылданған аргументтен кейін болса, оң бүтін санды қайтарады integer
. Егер әдіс 0 мәнін қайтарса, онда жол бірдей мәнге ие болады, бұл жағдайда әдіс equals(String str)
ақиқат мәнін қайтарады. compareToIgnoreCase(String str)
: Бұл әдіс алдыңғыға ұқсас, тек регистрді елемейді. Ол регистрді ескермейтін салыстыру үшін CASE_INSENSITIVE_ORDER компараторын пайдаланады. Егер қайтарылатын мән нөл болса, әдіс equalsIgnoreCase(String str)
ақиқат мәнін қайтарады. Бұл әдістерді түсіндіру үшін шағын мысалды қарастырайық:
public class StringCompareToExample {
public static void main(String[] args) {
String str = "ABC";
System.out.println(str.compareTo("DEF"));
System.out.println(str.compareToIgnoreCase("abc"));
}
}
Бағдарлама келесіні шығарады:
-3
0
8. Жолды символға және керісінше қалай түрлендіруге болады?
Бұл күрделі сұрақ, себебі жол таңбалар тізбегі, сондықтан оны тек бір таңбаға түрлендіруге болады.charAt
Белгіленген орында орналасқан таңбаны алу үшін әдісті пайдалана аламыз немесе toCharArray()
жолды таңбалар массивіне түрлендіру әдісін пайдалана аламыз. 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 ), "");
}
}
Бағдарлама келесіні шығарады:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW
9. Жолды byte массивіне және керісінше қалай түрлендіруге болады?
getBytes()
Біз жолды byte массивіне түрлендіру әдісін пайдалана аламыз және new String(byte[] arr)
byte массивін жолға түрлендіру үшін конструкторды пайдалана аламыз.
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)));
}
}
Бағдарлама келесіні шығарады:
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. Коммутатор құрылымында жолды пайдалана аламыз ба?
Бұл күрделі сұрақ тілдің қазіргі дамуы туралы біліміңізді тексеру үшін қолданылады. Java 7 жолдарды пайдалану үшін коммутатор мәлімдемесін кеңейтеді ; Java-ның бұрынғы нұсқалары бұған қолдау көрсетпейді. Жолдар үшін шартты ағынды жүзеге асырсаңыз, if-else шарттарын пайдалана аласыз және Java 7 немесе одан кейінгі нұсқасын пайдалансаңыз, switch операторын пайдалана аласыз. Мәлімдемеде жолды пайдаланудың шағын мысалыswitch
және шарттарды пайдаланудың бірдей логикасын көрсететін басқа әдіс 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");
}
}
}
Бағдарлама келесіні шығарады:
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)
switch
Java тіліндегі жолдарды пайдаланудың негізгі нүктелері .
- дизайнда жолдарды пайдалану
switch
бірнеше шарттарды жою арқылы codeты оқылатын етедіif-else
. - ішіндегі жолдар
switch
регистрге сезімтал, жоғарыдағы мысал мұны көрсетеді. - оператор алынған мәнді регистр мәндерімен салыстыру
switch
әдісін пайдаланады , сондықтан болдырмау үшін NULL үшін тексеруді қосыңыз .String.equals()
NullPointerException
- Жолдар үшін Java 7 құжаттамасына сәйкес , Java компиляторы біріктірілген шарттарға қарағанда
switch
құрылымдағы жолдар үшін тиімдірек byte codeты жасайды .switch
if-else
- бұл Java 7 немесе одан кейінгі нұсқасымен пайдаланылатынына көз жеткізіңіз, әйтпесе сіз аласыз
xception
.
11. Жолдың барлық ауыстыруларын басып шығаратын программа жазыңыз.
Бұл күрделі сұрақ және біз жолдың барлық ауыстыруларын табу үшін рекурсияны пайдалануымыз керек, мысалы, «AAB» ауыстырулары «AAB», «ABA» және «BAA» болуы мүмкін. Бізде қайталанатын жолдар жоқ екеніне көз жеткізу үшін Set пайдалану керек. Барлық ауыстыруларды алу үшін алдымен жолдың бірінші таңбасын алып, қалған таңбаларды қайта реттейміз. Егер Жол = «ABC» Бірінші таңба таңба = A және қалған ауыстырулар BC және CB. Енді біз бірінші таңбаны ауыстырулардағы қолжетімді орындарға кірістіре аламыз. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Мысал бағдарламасы: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));
}
}
Бағдарламаның шығуы:
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]
Мақаланың жалғасы
GO TO FULL VERSION