Sinif Java-da ən çox istifadə olunan siniflərdən
String
biridir. Bu məqalə bəzi vacib Java String müsahibə suallarını və cavablarını təqdim edir. Onlar sinif haqqında tam təsəvvür əldə etməkdə çox kömək edəcək String
və sizi siniflə bağlı istənilən müsahibə sualına hazırlayacaqlar String
.
1. Java-da String nədir? Bu hansı məlumat növüdür?
String Java-da java.lang paketində müəyyən edilmiş sinifdir. Bu int və long kimi primitiv məlumat növü deyil. String sinfi sətir simvol dəstini təmsil edir. Stringlər demək olar ki, bütün Java proqramlarında istifadə olunur və String sinfi haqqında bilməli olduğumuz bir neçə fakt var.immutable
Bu Java-da dəyişməz ( ) və yekunlaşdırılmış məlumat növüdür və String
virtual maşın sinifin bütün obyektlərini simli hovuzda saxlayır. Başqa bir xüsusiyyət qoşa dırnaq işarələrindən istifadə edərək sinif obyektlərini əldə etmək və birləşmə üçün “+” operatorunu həddən artıq yükləmək String
üsuludur .String
2. String obyektinin yaradılmasının müxtəlif üsulları hansılardır?
Biz Java-dakı hər hansı digər sinif kimi new operatordan istifadə edərək obyektlər yarada bilərik və ya obyekt yaratmaq üçün qoşa dırnaq işarələrindən istifadə edə bilərikString
. String
Simvol massivindən, bayt massivindən sətir əldə etmək, həmçinin və StringBuffer
ya istifadə etmək üçün bir neçə sinif konstruktoru da mövcuddur StringBuilder
.
String str = new String("abc");
String str1 = "abc";
Biz ikiqat dırnaq işarələrindən istifadə edərək sətir yaratdıqda, Java Virtual Maşın eyni dəyərə malik başqa bir sətir üçün sətir hovuzuna baxır. Əgər sətir tapılarsa, onda yalnız sinifin mövcud obyektinə istinad qaytarılır String
, əks halda alınan dəyərlə yeni obyekt yaradılır və hovuzda saxlanılır. Yeni operatordan istifadə etdiyimiz zaman virtual maşın obyekt yaradır, String
lakin onu simli hovuzda saxlamır. Biz simli hovuzda saxlamaq üçün metoddan istifadə edə bilərik intern()
və ya belə bir sətir artıq hovuzdadırsa, istinad əldə edə bilərik.
3. Sətin palindrom olub-olmadığını yoxlamaq üçün üsul yazın.
Sətir hər iki istiqamətdə eyni oxuyursa, palindrom adlanır. Məsələn, “aba” palindromik simdir. SinifString
sətri tərsinə çevirmək üçün heç bir üsul təqdim etmir, lakin siniflərdə sətirimizin palindrom olub-olmadığını yoxlaya biləcəyimiz tərs çevirmə metodu var 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);
}
Bəzən müsahibə götürən şəxs bu yoxlama üçün başqa siniflərdən istifadə etməməyi xahiş edə bilər, bu halda biz palindromu yoxlamaq üçün hər iki tərəfdəki sətirdəki simvolları müqayisə edə bilərik.
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. Verilmiş simvolun sətirdən çıxarılması üsulunu yazın.
replaceAll
Bir sətrin bütün hadisələrini başqa bir sətirlə əvəz etmək üçün bir üsuldan istifadə edə bilərik . Qeyd edək ki, metod arqument kimi sətri götürür, ona görə də biz Character
simvoldan sətir yaratmaq üçün sinifdən istifadə edirik və bütün simvolları boş sətirlə əvəz etmək üçün ondan istifadə edirik.
private static String removeChar(String str, char ch) {
if (str == null)
return null;
return str.replaceAll(Character.toString(ch), "");
}
5. Sətri böyük və ya kiçik hərflərə necə çevirə bilərik?
Həm böyük, həm də kiçik sətirləri əldə etməkString toUpperCase
üçün sinif metodlarından istifadə edə bilərik . toLowerCace
Bu üsullar arqument götürən Locale
və sətri böyük və ya kiçik hərflərə çevirmək üçün onun lokalizasiya qaydalarından istifadə edən həddindən artıq yüklənməyə malikdir.
6. SubSequence metodu nə edir?
Java 1.4 interfeysi təqdim etdiCharSequence
, bir sinif bu interfeysi miras alır və bu, bir metodu sinifdə String
tətbiq etmək üçün yeganə səbəbdir . Daxili olaraq çağırır . Metoddan istifadə üçün sadə bir nümunə: 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))));
}
}
Proqramın çıxışı aşağıdakıları göstərəcək:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
İdeal olaraq siz həmişə istifadə etməlisiniz substring
.
7. Java-da iki sətri necə müqayisə etmək olar?
SinifString
interfeysi miras alır Comparable
və iki metod seçiminə malikdir compareTo()
. Metod compareTo(String anotherString)
obyekti String
alınan arqumentlə String
leksikoqrafik olaraq müqayisə edir. Cari sətir alınan sətirdən əvvəl olarsa, metod mənfi tam ədədi qaytarır və sətir qəbul edilmiş arqumenti izləyirsə, müsbət tam ədəd qaytarır integer
. Metod 0 qaytarırsa, o zaman sətir eyni qiymətə malikdir, bu halda metod equals(String str)
da doğrunu qaytaracaq. compareToIgnoreCase(String str)
: Bu üsul əvvəlkinə bənzəyir, istisna olmaqla, reqlamentə məhəl qoymur. O, hərflərə həssas olmayan müqayisə üçün CASE_INSENSITIVE_ORDER Comparator istifadə edir. Qaytarılan dəyər sıfırdırsa, metod equalsIgnoreCase(String str)
da doğrunu qaytaracaq. Bu üsulları izah etmək üçün kiçik bir nümunəyə baxaq:
public class StringCompareToExample {
public static void main(String[] args) {
String str = "ABC";
System.out.println(str.compareTo("DEF"));
System.out.println(str.compareToIgnoreCase("abc"));
}
}
Proqram aşağıdakıları çıxaracaq:
-3
0
8. Simli simvola və əksinə necə çevirmək olar?
Bu hiylə sualıdır, çünki sətir simvollar ardıcıllığıdır, ona görə də biz onu yalnız bir simvola çevirə bilərik.charAt
Müəyyən bir mövqedə yerləşən simvolu əldə etmək üçün bir üsuldan istifadə edə bilərik və ya toCharArray()
sətri simvollar massivinə çevirmək üçün bir üsuldan istifadə edə bilərik. Java-da sətri simvola və simvolu simə çevirməyi göstərən sadə bir nümunə.
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 ), "");
}
}
Proqram aşağıdakıları çıxaracaq:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW
9. Sətri bayt massivinə və əksinə necə çevirmək olar?
getBytes()
Biz sətri bayt massivinə çevirmək üçün metoddan istifadə edə bilərik və new String(byte[] arr)
bayt massivini sətirə çevirmək üçün konstruktordan istifadə edə bilərik.
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)));
}
}
Proqram aşağıdakıları çıxaracaq:
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. Bir keçid konstruksiyasında sətirdən istifadə edə bilərikmi?
Bu çətin sual dilin hazırkı inkişafı haqqında biliklərinizi yoxlamaq üçün istifadə olunur. Java 7 keçid ifadəsini sətirlərdən istifadə etmək üçün genişləndirir; Java-nın əvvəlki versiyaları bunu dəstəkləmir. Əgər sətirlər üçün şərti axın tətbiq edirsinizsə, if-else şərtlərindən istifadə edə bilərsiniz və Java 7 və ya daha sonrakı versiyalardan istifadə edirsinizsə, keçid ifadəsindən istifadə edə bilərsiniz. İfadədə sətirdən istifadənin kiçik bir nümunəsiswitch
və şərtlərdən istifadə etməklə eyni məntiqi göstərən başqa bir üsul 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");
}
}
}
Proqram aşağıdakıları çıxaracaq:
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)
Java-da sətirlər üçün əsas istifadə nöqtələri switch
.
- dizaynda sətirlərin istifadəsi
switch
çoxlu şərtlər zəncirini aradan qaldıraraq kodu daha oxunaqlı edirif-else
. - sətirlər hərflərə
switch
həssasdır, yuxarıdakı nümunə bunu göstərir. - operator nəticədə yaranan dəyəri hal
switch
qiymətləri ilə müqayisə etmək üçün metoddan istifadə edir , buna görə də qarşısını almaq üçün NULL üçün çek əlavə edin .String.equals()
NullPointerException
- Sətirlər üçün Java 7 sənədlərinə əsasən
switch
, Java kompilyatoru konstruksiyadakı sətirlər üçünswitch
birləşdirilmiş şərtlərdən daha səmərəli bayt kodu yaradırif-else
. - Bunun Java 7 və ya daha sonrakı versiyaları ilə istifadə olunacağına əmin olun, əks halda
xception
.
11. Sətirin bütün dəyişmələrini çap edən proqram yazın.
Bu çətin sualdır və biz sətirin bütün dəyişdirmələrini tapmaq üçün rekursiyadan istifadə etməliyik, məsələn, “AAB” dəyişikliyi “AAB”, “ABA” və “BAA” ola bilər. Dublikat sətirlərimizin olmadığına əmin olmaq üçün Setdən də istifadə etməliyik. Bütün dəyişdirmələri əldə etmək üçün əvvəlcə sətirin birinci simvolunu götürürük və qalan simvolları yenidən təşkil edirik. Əgər String = “ABC” Birinci simvol simvolu = A və qalan permutasiyalar BC və CB. İndi biz birinci simvolu permutasiyalarda mövcud mövqelərə daxil edə bilərik. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Nümunə proqramı: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));
}
}
Proqram çıxışı:
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]
Məqalənin davamı
GO TO FULL VERSION