JavaRush /Java Blog /Random-KO /자바 문자열. 인터뷰 질문과 답변, 1부
Andrey
레벨 26

자바 문자열. 인터뷰 질문과 답변, 1부

Random-KO 그룹에 게시되었습니다
클래스는 StringJava에서 가장 널리 사용되는 클래스 중 하나입니다. 이 기사에서는 몇 가지 중요한 Java 문자열 인터뷰 질문과 답변을 제공합니다. 자바 문자열.  면접 질문과 답변, 1부 - 1그들은 수업에 대한 전체적인 그림을 얻는 데 매우 도움이 될 것이며 String수업 관련 인터뷰 질문에 대비할 것입니다 String.

1. 자바에서 문자열이란 무엇인가요? 이것은 어떤 데이터 유형입니까?

String은 java.lang 패키지에 정의된 Java 클래스입니다. int나 long과 같은 기본 데이터 유형이 아닙니다. String 클래스는 문자열 문자 집합을 나타냅니다. 문자열은 거의 모든 Java 애플리케이션에서 사용되며 String 클래스에 대해 알아야 할 몇 가지 사실이 있습니다. 이는 immutableJava의 불변( ) 및 최종 데이터 유형이며 String가상 머신은 클래스의 모든 객체를 문자열 풀에 저장합니다. 또 다른 기능은 큰따옴표를 사용하고 연결을 위해 "+" 연산자를 오버로드하여 String클래스 객체를 얻는 방법입니다 .String

2. String 객체를 생성하는 다양한 방법은 무엇입니까?

Java의 다른 클래스와 마찬가지로 new 연산자를 사용하여 객체를 생성하거나 큰따옴표를 사용하여 객체를 생성할 수 있습니다 String. String문자 배열, 바이트 배열에서 문자열을 가져오고 StringBuffer또는 를 사용하는 여러 클래스 생성자도 있습니다 StringBuilder.
String str = new String("abc");
String str1 = "abc";
큰따옴표를 사용하여 문자열을 생성하면 Java Virtual Machine은 문자열 풀에서 동일한 값을 가진 다른 문자열을 찾습니다. 문자열이 발견되면 클래스의 기존 객체에 대한 참조만 반환되고 String, 그렇지 않으면 수신된 값으로 새 객체가 생성되어 풀에 저장됩니다. new 연산자를 사용하면 가상 머신은 개체를 생성 String하지만 이를 문자열 풀에 저장하지 않습니다. 이 메서드를 사용하여 intern()문자열 풀에 문자열을 저장하거나 해당 문자열이 이미 풀에 있는 경우 참조를 가져올 수 있습니다.

3. 문자열이 회문인지 확인하는 방법을 작성합니다.

문자열을 양방향으로 읽으면 회문(palindrome)이라고 합니다. 예를 들어, "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)객체를 String수신된 인수와 String사전순으로 비교합니다. 현재 줄이 수신된 문자열보다 앞에 있으면 메서드는 음의 정수를 반환하고, 문자열이 수신된 인수 뒤에 오면 양의 정수를 반환합니다 integer. 메서드가 0을 반환하면 문자열은 동일한 값을 가지며, 이 경우 메서드 equals(String str)도 true를 반환합니다. compareToIgnoreCase(String str): 이 방법은 대소문자를 무시한다는 점을 제외하면 이전 방법과 유사합니다. 대소 문자를 구분하지 않는 비교를 위해 CASE_INSENSITIVE_ORDER 비교기를 사용합니다. 반환 값이 0이면 메서드 equalsIgnoreCase(String str)도 true를 반환합니다. 이러한 방법을 설명하기 위해 작은 예를 살펴보겠습니다.
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. 문자열을 바이트 배열로 또는 그 반대로 변환하는 방법은 무엇입니까?

메서드를 사용하여 getBytes()문자열을 바이트 배열로 변환할 수 있고 생성자를 사용하여 new String(byte[] arr)바이트 배열을 문자열로 변환할 수 있습니다.
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와 조건을 사용하여 동일한 논리를 보여주는 또 다른 방법입니다 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여러 조건 체인을 제거하여 코드를 더 쉽게 읽을 수 있습니다 if-else.
  • 문자열은 switch대소문자를 구분하며 위의 예에서는 이를 보여줍니다.
  • 연산자는 결과 값을 케이스switch 값과 비교하는 방법을 사용하므로 이를 방지하려면 NULL 검사를 추가합니다 .String.equals()NullPointerException
  • 의 문자열에 대한 Java 7 문서에 따르면 Java 컴파일러는 연결된 조건보다 switch구문의 문자열에 대해 더 효율적인 바이트코드를 생성합니다 .switchif-else
  • 이것이 Java 7 이상에서 사용되는지 확인하십시오. 그렇지 않으면 xception.

11. 문자열의 모든 순열을 인쇄하는 프로그램을 작성하세요.

이것은 까다로운 질문이므로 문자열의 모든 순열을 찾으려면 재귀를 사용해야 합니다. 예를 들어 "AAB"의 순열은 "AAB", "ABA" 및 "BAA"일 수 있습니다. 또한 중복된 행이 없는지 확인하려면 Set을 사용해야 합니다. 모든 순열을 얻으려면 먼저 문자열의 첫 번째 문자를 취하고 나머지 문자를 재배열합니다. 문자열 = "ABC"인 경우 첫 번째 문자 char = 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