Класс
String
Java тorндеги эң кеңири колдонулган класстардын бири. Бул макалада кээ бир маанилүү Java String интервью суроолорун жана жоопторун берет. Алар класстын толук сүрөтүн алууга абдан жардам берет жана класска байланыштуу интервью суроолоруна String
даярдайт .String
1. Java тorнде String деген эмне? Бул кандай маалымат түрү?
String Java.lang пакетинде аныкталган Java тorндеги класс. Бул int жана long сыяктуу примитивдүү маалымат түрү эмес. String классы саптын символдор жыйындысын билдирет. Саптар дээрлик бардык Java колдонмолорунда колдонулат жана String классы жөнүндө биз бorшибиз керек болгон бир нече фактылар бар.immutable
Бул Javaдагы өзгөрүлгүс ( ) жана жыйынтыкталган маалымат түрү жана String
виртуалдык машина класстын бардык an objectтерин саптык бассейнде сактайт. Дагы бир өзгөчөлүк - кош тырмакчаларды колдонуу жана бириктирүү үчүн "+" операторун ашыкча жүктөө аркылуу String
класс an objectтерин алуу жолу .String
2. String an objectисин түзүүнүн кандай жолдору бар?
Биз Javaдагы башка класстар сыяктуу жаңы оператордун жардамы менен an objectтерди түзө алабыз же an objectти түзүү үчүн кош тырмакчаларды колдоно алабызString
. String
Ошондой эле символдор массивинен, byte массивинен сапты алуу үчүн, ошондой эле StringBuffer
же колдонуу үчүн бир нече класс конструкторлору бар StringBuilder
.
String str = new String("abc");
String str1 = "abc";
Кош тырмакчаларды колдонуп сап түзгөндө, Java Virtual Machine сап бассейнинде ошол эле маанидеги башка сапты издейт. Эгерде сап табылса, класстын учурдагы an objectисине шилтеме гана кайтарылат String
, антпесе жаңы an object алынган маани менен түзүлүп, бассейнде сакталат. Биз жаңы операторду колдонгондо, виртуалдык машина an objectти түзөт String
, бирок аны сап бассейнинде сактаbyte. Сапты сап бассейнинде сактоо ыкмасын колдонсок болот intern()
, же мындай сап бассейнде мурунтан эле бар болсо, маалымдама ала алабыз.
3. Саптын палиндром экенин текшерүү ыкмасын жазыңыз.
Эгерде сап эки тарапта бирдей окулса, ал палиндром деп аталат. Мисалы, "аба" - палиндромдук сап. КлассString
сапты артка кайтаруунун эч кандай ыкмасын камсыз кылbyte, бирок класстарда биздин сапыбыздын палиндром экенин же жокпу текшере турган реверсация ыкмасы бар 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)
: Бул ыкма мурункуга окшош, бирок ал регистрге көңүл бурbyte. Ал чоң тамгаларды сезбестен салыштыруу үчүн CASE_INSENSITIVE_ORDER Comparator колдонот. Кайтаруу мааниси нөл болсо, анда ыкма 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 тorнде сапты символго жана символду сапка кантип айландырууну көрсөткөн жөнөкөй мисал.
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. Коммутатор конструкциясында сапты колдоно алабызбы?
Бул татаал суроо тилдин учурдагы өнүгүүсү боюнча бorмиңизди текшерүү үчүн колдонулат. Java 7 саптарды колдонуу үчүн switch операторун кеңейтет ; Javaнын мурунку versionлары муну колдобойт. Эгерде сиз саптар үчүн шарттуу агымды ишке ашырып жатсаңыз, анда if-else шарттарын колдоно аласыз жана Java 7 же андан кийинки versionсын колдонуп жатсаңыз, 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 documentациясына ылайык , Java компилятору бириктирилген шарттарга караганда
switch
конструкциядагы саптар үчүн натыйжалуу byte codeду жаратат .switch
if-else
- бул Java 7 же андан кийинки versionларда колдонулаарын текшериңиз, антпесе
xception
.
11. Саптын бардык алмаштырууларын басып чыгаруучу программаны жазыңыз.
Бул татаал суроо жана биз саптын бардык алмаштырууларын табуу үчүн рекурсияны колдонушубуз керек, мисалы "AAB" алмаштыруулары "AAB", "ABA" жана "BAA" болушу мүмкүн. Ошондой эле бизде кайталанма саптар жок экенин текшерүү үчүн Set колдонушубуз керек. Бардык алмаштырууларды алуу үчүн, адегенде саптын биринчи символун алып, калган символдорду иретке келтиребиз. Эгерде String = "ABC" Биринчи символ = A жана калган алмаштыруулар BC жана CB. Эми биз биринчи символду алмаштыруунун жеткorктүү орундарына киргизе алабыз. 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