JavaRush /Java Blog /Random-IT /Stringa Java. Domande e risposte all'intervista, parte 1
Andrey
Livello 26

Stringa Java. Domande e risposte all'intervista, parte 1

Pubblicato nel gruppo Random-IT
La classe Stringè una delle classi più utilizzate in Java. Questo articolo fornisce alcune importanti domande e risposte all'intervista Java String. Stringa Java.  Domande e risposte all'intervista, parte 1 - 1Saranno molto utili per avere un quadro completo della classe Stringe ti prepareranno per qualsiasi Stringdomanda di colloquio relativa alla classe.

1. Cos'è String in Java? Di che tipo di dati si tratta?

String è una classe in Java definita nel pacchetto java.lang. Non è un tipo di dati primitivo come int e long. La classe String rappresenta un set di caratteri stringa. Le stringhe vengono utilizzate in quasi tutte le applicazioni Java e ci sono alcuni fatti che dovremmo sapere sulla classe String. È un immutabletipo di dati immutabile ( ) e finalizzato in Java e Stringla macchina virtuale memorizza tutti gli oggetti della classe in un pool di stringhe. Un'altra caratteristica Stringè il modo di ottenere oggetti di classe Stringutilizzando virgolette doppie e sovraccaricando l'operatore “+” per la concatenazione.

2. Quali sono i diversi modi per creare un oggetto String?

Possiamo creare oggetti utilizzando l'operatore new proprio come qualsiasi altra classe in Java oppure possiamo utilizzare le virgolette doppie per creare un oggetto String. Esistono anche diversi costruttori di classi Stringper ottenere una stringa da un array di caratteri, un array di byte e anche utilizzando StringBuffero StringBuilder.
String str = new String("abc");
String str1 = "abc";
Quando creiamo una stringa utilizzando virgolette doppie, la Java Virtual Machine cerca nel pool di stringhe un'altra stringa con lo stesso valore. Se la stringa viene trovata, viene restituito solo un riferimento a un oggetto esistente della classe String, altrimenti viene creato un nuovo oggetto con il valore ricevuto e memorizzato nel pool. Quando utilizziamo l'operatore new, la macchina virtuale crea un oggetto Stringma non lo memorizza nello string pool. Possiamo utilizzare il metodo intern()per memorizzare una stringa in un pool di stringhe o ottenere un riferimento se tale stringa è già nel pool.

3. Scrivere un metodo per verificare se una stringa è palindroma.

Una stringa è detta palindromo se si legge allo stesso modo in entrambe le direzioni. Ad esempio, "aba" è una stringa palindromica. La classe Stringnon fornisce alcun metodo per invertire una stringa, ma le classi StringBufferhanno StringBuilderun metodo di inversione con il quale possiamo verificare se la nostra stringa è palindroma o meno.
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
A volte l'intervistatore può chiedere di non utilizzare altre classi per questo controllo, nel qual caso possiamo confrontare i caratteri nella stringa su entrambi i lati per verificare il palindromo.
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. Scrivere un metodo per rimuovere un dato carattere da una stringa.

Possiamo usare un metodo replaceAllper sostituire tutte le occorrenze di una stringa con un'altra stringa. Nota che il metodo accetta una stringa come argomento, quindi usiamo la classe Characterper creare una stringa da un carattere e usarla per sostituire tutti i caratteri con la stringa vuota.
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. Come possiamo convertire una stringa in maiuscolo o minuscolo?

Possiamo usare metodi di classe String toUpperCaseper toLowerCaceottenere stringhe sia maiuscole che minuscole. Questi metodi hanno un sovraccarico che accetta un argomento Localee usa le relative regole di localizzazione per convertire la stringa in maiuscolo o minuscolo.

6. Cosa fa il metodo subSequence?

Java 1.4 ha introdotto l'interfaccia CharSequence, una classe Stringeredita quell'interfaccia e questa è l'unica ragione per implementare un metodo subSequencein una classe String. Internamente chiama il file substring. Un semplice esempio di utilizzo del metodo:
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))));
    }
}
L'output del programma mostrerà quanto segue:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Idealmente dovresti sempre usare il file substring.

7. Come confrontare due stringhe in Java?

La classe Stringeredita l'interfaccia Comparablee dispone di due opzioni di metodo compareTo(). Il metodo compareTo(String anotherString)confronta lessicograficamente l'oggetto Stringcon l'argomento ricevuto String. Se la riga corrente precede la stringa ricevuta, il metodo restituisce un intero negativo e se la stringa segue l'argomento ricevuto, restituisce un intero positivo integer. Se il metodo restituisce 0, la stringa ha lo stesso valore, nel qual caso equals(String str)anche il metodo restituirà true. compareToIgnoreCase(String str): Questo metodo è simile al precedente tranne che ignora le maiuscole e minuscole. Utilizza il comparatore CASE_INSENSITIVE_ORDER per il confronto senza distinzione tra maiuscole e minuscole. Se il valore restituito è zero, equalsIgnoreCase(String str)anche il metodo restituirà true. Diamo un'occhiata a un piccolo esempio per spiegare questi metodi:
public class StringCompareToExample {
    public static void main(String[] args) {
        String str = "ABC";
        System.out.println(str.compareTo("DEF"));
        System.out.println(str.compareToIgnoreCase("abc"));
    }
}
Il programma produrrà quanto segue:
-3
0

8. Come convertire una stringa in un carattere e viceversa?

Questa è una domanda trabocchetto perché una stringa è una sequenza di caratteri, quindi possiamo convertirla solo in un singolo carattere. Possiamo usare un metodo charAtper ottenere il carattere situato in una posizione specifica oppure possiamo usare un metodo toCharArray()per convertire una stringa in un array di caratteri. Un semplice esempio che mostra come convertire una stringa in carattere e un carattere in stringa in 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 ), "");
    }
}
Il programma produrrà quanto segue:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. Come convertire una stringa in un array di byte e viceversa?

Possiamo usare un metodo getBytes()per convertire una stringa in un array di byte e possiamo usare un costruttore new String(byte[] arr)per convertire un array di byte in una stringa.
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)));
    }
}
Il programma produrrà quanto segue:
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. Possiamo usare una stringa in un costrutto switch?

Questa domanda complicata viene utilizzata per testare la tua conoscenza dell'attuale sviluppo della lingua. Java 7 estende l'istruzione switch per utilizzare le stringhe; le versioni precedenti di Java non lo supportano. Se stai implementando un flusso condizionale per le stringhe, puoi utilizzare le condizioni if-else e un'istruzione switch se stai utilizzando Java 7 o versioni successive. Un piccolo esempio di utilizzo di una stringa in un'istruzione switche di un altro metodo che mostra la stessa logica utilizzando le condizioni 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");
        }
    }
}
Il programma produrrà quanto segue:
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)
Punti di utilizzo chiave switchper le stringhe in Java.
  • l'utilizzo di stringhe nella progettazione switchrende il codice più leggibile eliminando più catene di condizioni if-else.
  • le stringhe fanno distinzione tra switchmaiuscole e minuscole, l'esempio sopra lo mostra.
  • L'operatore switchutilizza un metodo String.equals()per confrontare il valore risultante con i valori maiuscole e minuscole , quindi aggiungi un controllo per NULL da evitare NullPointerException.
  • Secondo la documentazione Java 7 per le stringhe in switch, il compilatore Java genera bytecode più efficiente per le stringhe in un costrutto switchrispetto alle condizioni concatenate if-else.
  • assicurati che questo verrà utilizzato con Java 7 o versioni successive, altrimenti otterrai xception.

11. Scrivere un programma che stampi tutte le permutazioni di una stringa.

Questa è una domanda complicata e dobbiamo usare la ricorsione per trovare tutte le permutazioni di una stringa, ad esempio le permutazioni di “AAB” potrebbero essere “AAB”, “ABA” e “BAA”. Dobbiamo anche usare Set per assicurarci di non avere righe duplicate. Per ottenere tutte le permutazioni, prendiamo prima il primo carattere della stringa e riorganizziamo i caratteri rimanenti. Se String = “ABC” Primo carattere char = A e restanti permutazioni BC e CB. Ora possiamo inserire il primo carattere nelle posizioni disponibili nelle permutazioni. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Programma di esempio:
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));
    }
}
Uscita del programma:
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]
Continuazione dell'articolo
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION