JavaRush /Java блогу /Random-KY /Java String. Интервью суроолору жана жооптору, 1-бөлүк
Andrey
Деңгээл

Java String. Интервью суроолору жана жооптору, 1-бөлүк

Группада жарыяланган
Класс StringJava тorндеги эң кеңири колдонулган класстардын бири. Бул макалада кээ бир маанилүү Java String интервью суроолорун жана жоопторун берет. Java String.  Интервью суроолору жана жооптору, 1-1-бөлүкАлар класстын толук сүрөтүн алууга абдан жардам берет жана класска байланыштуу интервью суроолоруна 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методду ишке ашыруунун жалгыз себеби . Ички ал деп атайт . Методду колдонуунун жөнөкөй мисалы: 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): Бул ыкма мурункуга окшош, бирок ал регистрге көңүл бур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)
switchJava тилдериндеги саптарды колдонуунун негизги пункттары .
  • дизайнда саптарды колдонуу switchшарттардын бир нече чынжырын жок кылуу менен codeду окула турган кылат if-else.
  • саптар регистрге switchсезимтал, жогорудагы мисал муну көрсөтүп турат.
  • оператор натыйжадагы маанини кейс маанилери менен салыштыруу switchыкмасын колдонот , андыктан качуу үчүн NULL үчүн чекти кошуңуз .String.equals()NullPointerException
  • Саптар үчүн Java 7 documentациясына ылайык , Java компилятору бириктирилген шарттарга караганда switchконструкциядагы саптар үчүн натыйжалуу byte codeду жаратат .switchif-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]
Макаланын уландысы
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION