JavaRush /Java blogi /Random-UZ /Java String. Intervyu savollari va javoblari, 1-qism
Andrey
Daraja

Java String. Intervyu savollari va javoblari, 1-qism

Guruhda nashr etilgan
Bu sinf StringJava-da eng ko'p ishlatiladigan sinflardan biridir. Ushbu maqola muhim Java String intervyu savollari va javoblarini taqdim etadi. Java String.  Suhbat uchun savollar va javoblar, 1-1-qismUlar sinf haqida to'liq tasavvurga ega bo'lishda juda foydali bo'ladi va sizni sinf bilan bog'liq har qanday intervyu savoliga Stringtayyorlaydi .String

1. Java tilidagi String nima? Bu qanday ma'lumotlar turi?

String Java tilidagi sinf boʻlib, java.lang paketida belgilangan. Bu int va long kabi ibtidoiy ma'lumotlar turi emas. String klassi qator belgilar to'plamini ifodalaydi. Stringlar deyarli barcha Java ilovalarida qo'llaniladi va biz String sinfi haqida bilishimiz kerak bo'lgan bir nechta faktlar mavjud. Bu Java-da o'zgarmas ( immutable) va yakuniy ma'lumotlar turi bo'lib, Stringvirtual mashina sinfning barcha ob'ektlarini string pulida saqlaydi. Yana bir xususiyat - qo'sh tirnoq yordamida sinf ob'ektlarini olish va birlashtirish uchun "+" operatorini ortiqcha yuklash Stringusuli .String

2. String obyektini yaratishning qanday usullari mavjud?

Biz yangi operator yordamida xuddi Java-dagi boshqa sinflar kabi ob'ektlar yaratishimiz mumkin yoki ob'ekt yaratish uchun qo'sh tirnoqlardan foydalanishimiz mumkin String. StringBelgilar massivi, bayt massividan satr olish, shuningdek, StringBufferyoki dan foydalanish uchun bir nechta sinf konstruktorlari ham mavjud StringBuilder.
String str = new String("abc");
String str1 = "abc";
Ikki tirnoq yordamida satr yaratganimizda, Java Virtual Mashina bir xil qiymatga ega bo'lgan boshqa qatorni izlaydi. Agar satr topilsa, u holda faqat sinfning mavjud ob'ektiga havola qaytariladi String, aks holda olingan qiymat bilan yangi ob'ekt yaratiladi va hovuzda saqlanadi. Yangi operatordan foydalanganda virtual mashina ob'ekt yaratadi, Stringlekin uni string hovuzida saqlamaydi. Ushbu usuldan satrni string hovuzida saqlash uchun foydalanishimiz mumkin intern()yoki agar bunday qator allaqachon hovuzda bo'lsa, ma'lumotnoma olishimiz mumkin.

3. Satrning palindrom ekanligini tekshirish usulini yozing.

Agar satr ikki yo‘nalishda bir xil o‘qilsa, palindrom deyiladi. Masalan, "aba" palindromik qatordir. Sinf Stringsatrni teskari o'zgartirish uchun hech qanday usulni taqdim etmaydi, lekin sinflarda teskari usul mavjud StringBufferbo'lib StringBuilder, uning yordamida biz satrimiz palindrom yoki yo'qligini tekshirishimiz mumkin.
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
Ba'zida intervyu oluvchi ushbu tekshirish uchun boshqa sinflardan foydalanmaslikni so'rashi mumkin, bu holda biz palindromni tekshirish uchun ikkala tomondagi satrdagi belgilarni solishtirishimiz mumkin.
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. Satrdan berilgan belgini olib tashlash usulini yozing.

replaceAllBiz satrning barcha hodisalarini boshqa satr bilan almashtirish uchun usuldan foydalanishimiz mumkin . E'tibor bering, usul argument sifatida satrni oladi, shuning uchun biz Characterbelgidan satr yaratish uchun sinfdan foydalanamiz va barcha belgilarni bo'sh satr bilan almashtirish uchun foydalanamiz.
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. Qanday qilib satrni katta yoki kichik harfga o'tkazishimiz mumkin?

Katta va kichik satrlarni olish String toUpperCaseuchun sinf usullaridan foydalanishimiz mumkin . toLowerCaceBu usullar argumentni qabul qiladigan Localeva satrni katta yoki kichik harflarga aylantirish uchun uning lokalizatsiya qoidalaridan foydalanadigan ortiqcha yukga ega.

6. SubSequence usuli nima qiladi?

Java 1.4 interfeysni taqdim etdi CharSequence, sinf ushbu interfeysni meros qilib oladi va bu sinfda Stringusulni amalga oshirishning yagona sababidir . Ichkarida u ni chaqiradi . Usuldan foydalanishning oddiy misoli: 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))));
    }
}
Dasturning chiqishi quyidagilarni ko'rsatadi:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Ideal holda siz har doim dan foydalanishingiz kerak substring.

7. Java-da ikki qatorni qanday solishtirish mumkin?

Sinf Stringinterfeysni meros qilib oladi Comparableva ikkita usul variantiga ega compareTo(). Usul compareTo(String anotherString)ob'ektni Stringolingan argument bilan Stringleksikografik jihatdan taqqoslaydi. Agar joriy satr qabul qilingan satrdan oldin bo'lsa, usul manfiy butun sonni qaytaradi va agar satr olingan argumentdan keyin bo'lsa, u ijobiy butun sonni qaytaradi integer. Agar usul 0 ni qaytarsa, u holda satr bir xil qiymatga ega bo'ladi, bu holda usul equals(String str)ham haqiqatni qaytaradi. compareToIgnoreCase(String str): Bu usul avvalgisiga o'xshaydi, bundan tashqari u kichik harflarni e'tiborsiz qoldiradi. U katta-kichik harflarni sezmaydigan taqqoslash uchun CASE_INSENSITIVE_ORDER Comparatordan foydalanadi. Qaytish qiymati nolga teng bo'lsa, usul equalsIgnoreCase(String str)ham rostni qaytaradi. Ushbu usullarni tushuntirish uchun kichik bir misolni ko'rib chiqaylik:
public class StringCompareToExample {
    public static void main(String[] args) {
        String str = "ABC";
        System.out.println(str.compareTo("DEF"));
        System.out.println(str.compareToIgnoreCase("abc"));
    }
}
Dastur quyidagilarni chiqaradi:
-3
0

8. Satrni belgiga va aksincha qanday o'zgartiriladi?

Bu hiyla-nayrang savol, chunki satr belgilar ketma-ketligidir, shuning uchun biz uni faqat bitta belgiga aylantira olamiz. charAtBelgilangan joyda joylashgan belgini olish uchun usuldan foydalanishimiz mumkin yoki toCharArray()satrni belgilar qatoriga aylantirish usulidan foydalanishimiz mumkin. Java-da satrni belgiga va belgilarni satrga qanday aylantirishni ko'rsatadigan oddiy misol.
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 ), "");
    }
}
Dastur quyidagilarni chiqaradi:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. Satrni bayt massiviga va aksincha qanday o'zgartiriladi?

getBytes()Biz satrni bayt massiviga aylantirish uchun usuldan foydalanishimiz mumkin va new String(byte[] arr)bayt massivini satrga aylantirish uchun konstruktordan foydalanishimiz mumkin.
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)));
    }
}
Dastur quyidagilarni chiqaradi:
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. Kommutator konstruksiyasida satrdan foydalana olamizmi?

Ushbu qiyin savol tilning hozirgi rivojlanishi haqidagi bilimingizni tekshirish uchun ishlatiladi. Java 7 satrlardan foydalanish uchun switch bayonotini kengaytiradi ; Java ning oldingi versiyalari buni qo'llab-quvvatlamaydi. Agar siz satrlar uchun shartli oqimni amalga oshirayotgan bo'lsangiz, if-else shartlaridan foydalanishingiz mumkin va agar siz Java 7 yoki undan keyingi versiyadan foydalansangiz, switch iborasidan foydalanishingiz mumkin. Bayonotda mag'lubiyatdan foydalanishning kichik misoli switchva shartlardan foydalanish bir xil mantiqni ko'rsatadigan boshqa usul 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");
        }
    }
}
Dastur quyidagilarni chiqaradi:
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)
switchJava-da strings uchun asosiy foydalanish nuqtalari .
  • dizayndagi satrlardan foydalanish, switchbir nechta shartlar zanjirini yo'q qilish orqali kodni yanada o'qilishi mumkin if-else.
  • satrlar switchkatta-kichik harflarga sezgir, yuqoridagi misol buni ko'rsatadi.
  • operator natijaviy qiymatni caseswitch qiymatlari bilan solishtirish usulidan foydalanadi , shuning uchun oldini olish uchun NULL uchun chek qo'shing .String.equals()NullPointerException
  • Satrlar uchun Java 7 hujjatlariga ko'ra switch, Java kompilyatori konstruksiyadagi satrlar uchun switchbirlashtirilgan shartlarga qaraganda samaraliroq bayt kodini yaratadi if-else.
  • Bu Java 7 yoki undan keyingi versiyalarda ishlatilishiga ishonch hosil qiling, aks holda siz xception.

11. Satrning barcha almashtirishlarini chop etuvchi dastur tuzing.

Bu qiyin savol va biz satrning barcha almashtirishlarini topish uchun rekursiyadan foydalanishimiz kerak, masalan, "AAB" ning almashtirishlari "AAB", "ABA" va "BAA" bo'lishi mumkin. Shuningdek, bizda takroriy qatorlar yo'qligiga ishonch hosil qilish uchun Set dan foydalanishimiz kerak. Barcha almashtirishlarni olish uchun biz birinchi navbatda satrning birinchi belgisini olamiz va qolgan belgilarni o'zgartiramiz. Agar String = "ABC" Birinchi belgi char = A va qolgan BC va CB almashtirishlari. Endi biz birinchi belgini almashtirishlardagi mavjud pozitsiyalarga kiritishimiz mumkin. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Dasturga misol:
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));
    }
}
Dastur chiqishi:
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]
Maqolaning davomi
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION