JavaRush /Java-Blog /Random-DE /Java-String. Fragen und Antworten im Vorstellungsgespräch...
Andrey
Level 26

Java-String. Fragen und Antworten im Vorstellungsgespräch, Teil 1

Veröffentlicht in der Gruppe Random-DE
Die Klasse Stringist eine der am häufigsten verwendeten Klassen in Java. Dieser Artikel enthält einige wichtige Fragen und Antworten zu Java String-Interviews. Java-String.  Fragen und Antworten im Vorstellungsgespräch, Teil 1 - 1Sie werden Ihnen sehr dabei helfen, sich ein vollständiges Bild von der Klasse zu machen String, und Sie auf alle klassenbezogenen StringInterviewfragen vorbereiten.

1. Was ist String in Java? Welcher Datentyp ist das?

String ist eine Klasse in Java, die im Paket java.lang definiert ist. Es handelt sich nicht um einen primitiven Datentyp wie int und long. Die String-Klasse stellt einen String-Zeichensatz dar. Strings werden in fast allen Java-Anwendungen verwendet und es gibt ein paar Fakten, die wir über die String-Klasse wissen sollten. Es handelt sich um einen unveränderlichen ( immutable) und finalisierten Datentyp in Java und Stringdie virtuelle Maschine speichert alle Objekte der Klasse in einem String-Pool. Ein weiteres Feature Stringist die Möglichkeit, Klassenobjekte Stringmithilfe von doppelten Anführungszeichen und dem Überladen des „+“-Operators für die Verkettung zu erhalten.

2. Welche verschiedenen Möglichkeiten gibt es, ein String-Objekt zu erstellen?

Wir können Objekte wie jede andere Klasse in Java mit dem neuen Operator erstellen oder doppelte Anführungszeichen verwenden, um ein Objekt zu erstellen String. Es gibt auch mehrere Klassenkonstruktoren Stringzum Abrufen einer Zeichenfolge aus einem Zeichenarray, einem Bytearray und auch mit StringBufferoder StringBuilder.
String str = new String("abc");
String str1 = "abc";
Wenn wir eine Zeichenfolge mit doppelten Anführungszeichen erstellen, sucht die Java Virtual Machine im Zeichenfolgenpool nach einer anderen Zeichenfolge mit demselben Wert. Wird der String gefunden, so wird nur eine Referenz auf ein bestehendes Objekt der Klasse zurückgegeben String, andernfalls wird ein neues Objekt mit dem empfangenen Wert erstellt und im Pool gespeichert. Wenn wir den neuen Operator verwenden, erstellt die virtuelle Maschine ein Objekt String, speichert es jedoch nicht im String-Pool. Wir können die Methode verwenden intern(), um einen String in einem String-Pool zu speichern oder eine Referenz abzurufen, wenn sich ein solcher String bereits im Pool befindet.

3. Schreiben Sie eine Methode, um zu überprüfen, ob eine Zeichenfolge ein Palindrom ist.

Ein String wird Palindrom genannt, wenn er in beide Richtungen gleich lautet. „aba“ ist beispielsweise eine palindromische Zeichenfolge. Die Klasse Stringbietet keine Methode zum Umkehren eines Strings, aber Klassen StringBufferverfügen StringBuilderüber eine Umkehrmethode, mit der wir überprüfen können, ob unser String ein Palindrom ist oder nicht.
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
Manchmal bittet der Interviewer möglicherweise darum, für diese Prüfung keine anderen Klassen zu verwenden. In diesem Fall können wir die Zeichen in der Zeichenfolge auf beiden Seiten vergleichen, um nach Palindromen zu suchen.
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. Schreiben Sie eine Methode zum Entfernen eines bestimmten Zeichens aus einer Zeichenfolge.

Wir können eine Methode verwenden replaceAll, um alle Vorkommen einer Zeichenfolge durch eine andere Zeichenfolge zu ersetzen. Beachten Sie, dass die Methode eine Zeichenfolge als Argument akzeptiert. Daher verwenden wir die Klasse, Characterum eine Zeichenfolge aus einem Zeichen zu erstellen und diese zum Ersetzen aller Zeichen durch die leere Zeichenfolge zu verwenden.
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. Wie können wir eine Zeichenfolge in Groß- oder Kleinschreibung umwandeln?

Wir können Klassenmethoden verwenden, String toUpperCaseum toLowerCacesowohl Groß- als auch Kleinbuchstaben zu erhalten. Diese Methoden verfügen über eine Überladung, die ein Argument annimmt Localeund seine Lokalisierungsregeln verwendet, um die Zeichenfolge in Groß- oder Kleinschreibung umzuwandeln.

6. Was macht die subSequence-Methode?

Mit Java 1.4 wurde die Schnittstelle eingeführt CharSequence, eine Klasse Stringerbt diese Schnittstelle und das ist der einzige Grund, eine Methode subSequencein einer Klasse zu implementieren String. Intern ruft es die substring. Ein einfaches Beispiel für die Verwendung der Methode:
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))));
    }
}
Die Ausgabe des Programms zeigt Folgendes:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Idealerweise sollten Sie immer die verwenden substring.

7. Wie vergleiche ich zwei Zeichenfolgen in Java?

Die Klasse Stringerbt die Schnittstelle Comparableund verfügt über zwei Methodenoptionen compareTo(). Die Methode compareTo(String anotherString)vergleicht das Objekt lexikografisch Stringmit dem empfangenen Argument String. Wenn die aktuelle Zeile vor der empfangenen Zeichenfolge steht, gibt die Methode eine negative Ganzzahl zurück. Wenn die Zeichenfolge auf das empfangene Argument folgt, gibt sie eine positive Ganzzahl zurück integer. Wenn die Methode 0 zurückgibt, hat die Zeichenfolge denselben Wert. In diesem Fall equals(String str)gibt die Methode auch true zurück. compareToIgnoreCase(String str): Diese Methode ähnelt der vorherigen, außer dass sie die Groß-/Kleinschreibung ignoriert. Es verwendet den CASE_INSENSITIVE_ORDER Comparator für einen Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung. Wenn der Rückgabewert Null ist, equalsIgnoreCase(String str)gibt die Methode auch true zurück. Schauen wir uns ein kleines Beispiel an, um diese Methoden zu erklären:
public class StringCompareToExample {
    public static void main(String[] args) {
        String str = "ABC";
        System.out.println(str.compareTo("DEF"));
        System.out.println(str.compareToIgnoreCase("abc"));
    }
}
Das Programm gibt Folgendes aus:
-3
0

8. Wie konvertiere ich eine Zeichenfolge in ein Zeichen und umgekehrt?

Dies ist eine Trickfrage, da eine Zeichenfolge eine Folge von Zeichen ist und wir sie daher nur in ein einzelnes Zeichen umwandeln können. Wir können eine Methode verwenden, charAtum das Zeichen an einer bestimmten Position abzurufen, oder wir können eine Methode verwenden, toCharArray()um eine Zeichenfolge in ein Array von Zeichen umzuwandeln. Ein einfaches Beispiel, das zeigt, wie man in Java eine Zeichenfolge in ein Zeichen und ein Zeichen in eine Zeichenfolge umwandelt.
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 ), "");
    }
}
Das Programm gibt Folgendes aus:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. Wie konvertiere ich einen String in ein Byte-Array und umgekehrt?

Wir können eine Methode verwenden getBytes(), um einen String in ein Byte-Array umzuwandeln, und wir können einen Konstruktor verwenden, um new String(byte[] arr)ein Byte-Array in einen String umzuwandeln.
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 одинаковые oder нет
        System.out.println("str == str1? " + (str == str1));
        System.out.println("str.equals(str1)? " + (str.equals(str1)));
    }
}
Das Programm gibt Folgendes aus:
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. Können wir einen String in einem Switch-Konstrukt verwenden?

Mit dieser kniffligen Frage können Sie Ihr Wissen über die aktuelle Entwicklung der Sprache testen. Java 7 erweitert die Switch-Anweisung um die Verwendung von Zeichenfolgen; frühere Versionen von Java unterstützen dies nicht. Wenn Sie einen bedingten Ablauf für Zeichenfolgen implementieren, können Sie if-else-Bedingungen verwenden und Sie können eine switch-Anweisung verwenden, wenn Sie Java 7 oder höher verwenden. Ein kleines Beispiel für die Verwendung einer Zeichenfolge in einer Anweisung switchund einer anderen Methode, die dieselbe Logik mithilfe von Bedingungen zeigt 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");
        }
    }
}
Das Programm gibt Folgendes aus:
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)
Wichtige Verwendungspunkte switchfür Strings in Java.
  • Durch die Verwendung von Zeichenfolgen im Design switchwird der Code besser lesbar, da mehrere Bedingungsketten eliminiert werden if-else.
  • Bei Zeichenfolgen wird die switchGroß-/Kleinschreibung beachtet, das obige Beispiel zeigt dies.
  • Der Operator switchverwendet eine Methode String.equals(), um den resultierenden Wert mit Fallwerten zu vergleichen . Fügen Sie daher eine Prüfung auf NULL hinzu, um dies zu vermeiden NullPointerException.
  • Laut der Java 7-Dokumentation für Zeichenfolgen in switchgeneriert der Java-Compiler effizienteren Bytecode für Zeichenfolgen in einem Konstrukt switchals für verkettete Bedingungen if-else.
  • Stellen Sie sicher, dass dies mit Java 7 oder höher verwendet wird, sonst erhalten Sie xception.

11. Schreiben Sie ein Programm, das alle Permutationen einer Zeichenfolge ausgibt.

Dies ist eine knifflige Frage und wir müssen die Rekursion verwenden, um alle Permutationen einer Zeichenfolge zu finden. Die Permutationen von „AAB“ könnten beispielsweise „AAB“, „ABA“ und „BAA“ sein. Wir müssen außerdem Set verwenden, um sicherzustellen, dass wir keine doppelten Zeilen haben. Um alle Permutationen zu erhalten, nehmen wir zunächst das erste Zeichen der Zeichenfolge und ordnen die restlichen Zeichen neu an. Wenn String = „ABC“, erstes Zeichen char = A und verbleibende Permutationen BC und CB. Jetzt können wir das erste Zeichen an den verfügbaren Positionen in den Permutationen einfügen. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Beispielprogramm:
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));
    }
}
Programmausgabe:
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]
Fortsetzung des Artikels
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION