La classe
String
è una delle classi più utilizzate in Java. Questo articolo fornisce alcune importanti domande e risposte all'intervista Java String. Saranno molto utili per avere un quadro completo della classe String
e ti prepareranno per qualsiasi String
domanda 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. È unimmutable
tipo di dati immutabile ( ) e finalizzato in Java e String
la macchina virtuale memorizza tutti gli oggetti della classe in un pool di stringhe. Un'altra caratteristica String
è il modo di ottenere oggetti di classe String
utilizzando 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 oggettoString
. Esistono anche diversi costruttori di classi String
per ottenere una stringa da un array di caratteri, un array di byte e anche utilizzando StringBuffer
o 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 String
ma 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 classeString
non fornisce alcun metodo per invertire una stringa, ma le classi StringBuffer
hanno StringBuilder
un 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 metodoreplaceAll
per sostituire tutte le occorrenze di una stringa con un'altra stringa. Nota che il metodo accetta una stringa come argomento, quindi usiamo la classe Character
per 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 classeString toUpperCase
per toLowerCace
ottenere stringhe sia maiuscole che minuscole. Questi metodi hanno un sovraccarico che accetta un argomento Locale
e 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'interfacciaCharSequence
, una classe String
eredita quell'interfaccia e questa è l'unica ragione per implementare un metodo subSequence
in 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 classeString
eredita l'interfaccia Comparable
e dispone di due opzioni di metodo compareTo()
. Il metodo compareTo(String anotherString)
confronta lessicograficamente l'oggetto String
con 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 metodocharAt
per 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 metodogetBytes()
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'istruzioneswitch
e 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 switch
per le stringhe in Java.
- l'utilizzo di stringhe nella progettazione
switch
rende il codice più leggibile eliminando più catene di condizioniif-else
. - le stringhe fanno distinzione tra
switch
maiuscole e minuscole, l'esempio sopra lo mostra. - L'operatore
switch
utilizza un metodoString.equals()
per confrontare il valore risultante con i valori maiuscole e minuscole , quindi aggiungi un controllo per NULL da evitareNullPointerException
. - Secondo la documentazione Java 7 per le stringhe in
switch
, il compilatore Java genera bytecode più efficiente per le stringhe in un costruttoswitch
rispetto alle condizioni concatenateif-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
GO TO FULL VERSION