JavaRush /Java блогы /Random-KK /Java жолы. Сұхбат сұрақтары мен жауаптары, 1 бөлім
Andrey
Деңгей

Java жолы. Сұхбат сұрақтары мен жауаптары, 1 бөлім

Топта жарияланған
Класс StringJava тіліндегі ең көп қолданылатын сыныптардың бірі болып табылады. Бұл мақалада маңызды Java String сұхбат сұрақтары мен жауаптары берілген. Java жолы.  Сұхбат сұрақтары мен жауаптары, 1 - 1 бөлімОлар сыныптың толық бейнесін алуға өте пайдалы болады Stringжәне сізді сыныпқа қатысты кез келген сұхбат сұрағына дайындайды String.

1. Java тіліндегі String дегеніміз не? Бұл қандай деректер түрі?

Жол – Java.lang бумасында анықталған Java тіліндегі класс. Бұл int және long сияқты қарапайым деректер түрі емес. String класы жол таңбалар жиынын білдіреді. Жолдар барлық дерлік Java қолданбаларында қолданылады және String класы туралы білуіміз керек бірнеше фактілер бар. Бұл immutableJava тіліндегі өзгермейтін ( ) және аяқталған деректер түрі және 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әдісті енгізудің жалғыз себебі . Ішкі ол деп атайды . Әдісті қолданудың қарапайым мысалы: 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))));
    }
}
Бағдарламаның шығысы келесіні көрсетеді:
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)
switchJava тіліндегі жолдарды пайдаланудың негізгі нүктелері .
  • дизайнда жолдарды пайдалану switchбірнеше шарттарды жою арқылы codeты оқылатын етеді if-else.
  • ішіндегі жолдар switchрегистрге сезімтал, жоғарыдағы мысал мұны көрсетеді.
  • оператор алынған мәнді регистр мәндерімен салыстыру switchәдісін пайдаланады , сондықтан болдырмау үшін NULL үшін тексеруді қосыңыз .String.equals()NullPointerException
  • Жолдар үшін Java 7 құжаттамасына сәйкес , Java компиляторы біріктірілген шарттарға қарағанда switchқұрылымдағы жолдар үшін тиімдірек byte codeты жасайды .switchif-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]
Мақаланың жалғасы
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION