JavaRush /Java Blogu /Random-AZ /Java String. Müsahibə sualları və cavabları, 1-ci hissə
Andrey
Səviyyə

Java String. Müsahibə sualları və cavabları, 1-ci hissə

Qrupda dərc edilmişdir
Sinif Java-da ən çox istifadə olunan siniflərdən Stringbiridir. Bu məqalə bəzi vacib Java String müsahibə suallarını və cavablarını təqdim edir. Java String.  Müsahibə sualları və cavabları, 1-1-ci hissəOnlar sinif haqqında tam təsəvvür əldə etməkdə çox kömək edəcək Stringvə 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. immutableBu Java-da dəyişməz ( ) və yekunlaşdırılmış məlumat növüdür və Stringvirtual 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ərik String. StringSimvol massivindən, bayt massivindən sətir əldə etmək, həmçinin və StringBufferya 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, Stringlakin 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. Sinif Stringsə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.

replaceAllBir 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 Charactersimvoldan 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ək String toUpperCaseüçün sinif metodlarından istifadə edə bilərik . toLowerCaceBu üsullar arqument götürən Localevə 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 etdi CharSequence, bir sinif bu interfeysi miras alır və bu, bir metodu sinifdə Stringtətbiq etmək üçün yeganə səbəbdir . Daxili olaraq çağırır . Metoddan istifadə üçün sadə bir nümunə: subSequenceStringsubstring
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?

Sinif Stringinterfeysi miras alır Comparablevə iki metod seçiminə malikdir compareTo(). Metod compareTo(String anotherString)obyekti Stringalınan arqumentlə Stringleksikoqrafik 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. charAtMüə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əsi switchvə şə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ı edir if-else.
  • sətirlər hərflərə switchhəssasdır, yuxarıdakı nümunə bunu göstərir.
  • operator nəticədə yaranan dəyəri halswitch 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 üçün switchbirləşdirilmiş şərtlərdən daha səmərəli bayt kodu yaradır if-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ı
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION