JavaRush /Blog Java /Random-ES /Cadena de Java. Preguntas y respuestas de la entrevista, ...
Andrey
Nivel 26

Cadena de Java. Preguntas y respuestas de la entrevista, parte 1

Publicado en el grupo Random-ES
La clase Stringes una de las clases más utilizadas en Java. Este artículo proporciona algunas preguntas y respuestas importantes de la entrevista sobre Java String. Cadena de Java.  Preguntas y respuestas de la entrevista, parte 1 - 1Serán de gran ayuda para obtener una imagen completa de la clase Stringy lo prepararán para cualquier Stringpregunta de la entrevista relacionada con la clase.

1. ¿Qué es una cadena en Java? ¿Qué tipo de datos es este?

String es una clase en Java que se define en el paquete java.lang. No es un tipo de datos primitivo como int y long. La clase String representa un conjunto de caracteres de cadena. Las cadenas se utilizan en casi todas las aplicaciones Java y hay algunos datos que debemos conocer sobre la clase String. Es un immutabletipo de datos inmutable () y finalizado en Java y Stringla máquina virtual almacena todos los objetos de la clase en un grupo de cadenas. Otra característica Stringes la forma de obtener objetos de clase Stringusando comillas dobles y sobrecargando el operador “+” para la concatenación.

2. ¿Cuáles son las diferentes formas de crear un objeto String?

Podemos crear objetos usando el operador new como cualquier otra clase en Java o podemos usar comillas dobles para crear un objeto String. También existen varios constructores de clases Stringpara obtener una cadena de una matriz de caracteres, una matriz de bytes y también usar StringBuffero StringBuilder.
String str = new String("abc");
String str1 = "abc";
Cuando creamos una cadena usando comillas dobles, la Máquina Virtual Java busca en el grupo de cadenas otra cadena con el mismo valor. Si se encuentra la cadena, solo se devuelve una referencia a un objeto existente de la clase String; de ​​lo contrario, se crea un nuevo objeto con el valor recibido y se almacena en el grupo. Cuando usamos el nuevo operador, la máquina virtual crea un objeto Stringpero no lo almacena en el grupo de cadenas. Podemos usar el método intern()para almacenar una cadena en un grupo de cadenas u obtener una referencia si dicha cadena ya está en el grupo.

3. Escribe un método para comprobar si una cadena es un palíndromo.

Una cuerda se llama palíndromo si se lee igual en ambas direcciones. Por ejemplo, "aba" es una cuerda palindrómica. La clase Stringno proporciona ningún método para invertir una cadena, pero las clases StringBufferStringBuildertienen un método de inversión con el que podemos comprobar si nuestra cadena es un palíndromo o no.
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
A veces, el entrevistador puede solicitar no utilizar otras clases para esta verificación, en cuyo caso podemos comparar los caracteres de la cadena en ambos lados para verificar el palíndromo.
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. Escriba un método para eliminar un carácter determinado de una cadena.

Podemos usar un método replaceAllpara reemplazar todas las apariciones de una cadena con otra cadena. Tenga en cuenta que el método toma una cadena como argumento, por lo que usamos la clase Characterpara crear una cadena a partir de un carácter y la usamos para reemplazar todos los caracteres con la cadena vacía.
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. ¿Cómo podemos convertir una cadena a mayúsculas o minúsculas?

Podemos usar métodos de clase String toUpperCasepara toLowerCaceobtener cadenas tanto en mayúsculas como en minúsculas. Estos métodos tienen una sobrecarga que toma un argumento Localey usa sus reglas de localización para convertir la cadena a mayúsculas o minúsculas.

6. ¿Qué hace el método subSequence?

Java 1.4 introdujo la interfaz CharSequence, una clase Stringhereda esta interfaz y esa es la única razón para implementar un método subSequenceen una clase String. Internamente llama al substring. Un ejemplo simple del uso del método:
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))));
    }
}
La salida del programa mostrará lo siguiente:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Lo ideal es utilizar siempre el substring.

7. ¿Cómo comparar dos cadenas en Java?

La clase Stringhereda la interfaz Comparabley tiene dos opciones de método compareTo(). El método compareTo(String anotherString)compara lexicográficamente el objeto Stringcon el argumento recibido String. Si la línea actual precede a la cadena recibida, el método devuelve un número entero negativo y si la cadena sigue al argumento recibido, devuelve un número entero positivo integer. Si el método devuelve 0, entonces la cadena tiene el mismo valor, en cuyo caso el método equals(String str)también devolverá verdadero. compareToIgnoreCase(String str): Este método es similar al anterior excepto que ignora mayúsculas y minúsculas. Utiliza el comparador CASE_INSENSITIVE_ORDER para realizar comparaciones que no distinguen entre mayúsculas y minúsculas. Si el valor de retorno es cero, el método equalsIgnoreCase(String str)también devolverá verdadero. Veamos un pequeño ejemplo para explicar estos métodos:
public class StringCompareToExample {
    public static void main(String[] args) {
        String str = "ABC";
        System.out.println(str.compareTo("DEF"));
        System.out.println(str.compareToIgnoreCase("abc"));
    }
}
El programa generará lo siguiente:
-3
0

8. ¿Cómo convertir una cadena en un carácter y viceversa?

Esta es una pregunta capciosa porque una cadena es una secuencia de caracteres, por lo que solo podemos convertirla en un solo carácter. Podemos usar un método charAtpara ubicar el carácter en una posición específica o podemos usar un método toCharArray()para convertir una cadena en una matriz de caracteres. Un ejemplo sencillo que muestra cómo convertir una cadena en carácter y un carácter en cadena en 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 ), "");
    }
}
El programa generará lo siguiente:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. ¿Cómo convertir una cadena en una matriz de bytes y viceversa?

Podemos usar un método getBytes()para convertir una cadena en una matriz de bytes y podemos usar un constructor new String(byte[] arr)para convertir una matriz de bytes en una cadena.
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 одинаковые o нет
        System.out.println("str == str1? " + (str == str1));
        System.out.println("str.equals(str1)? " + (str.equals(str1)));
    }
}
El programa generará lo siguiente:
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. ¿Podemos usar una cadena en una construcción de interruptor?

Esta pregunta complicada se utiliza para evaluar su conocimiento del desarrollo actual del idioma. Java 7 extiende la declaración de cambio para usar cadenas; las versiones anteriores de Java no lo admiten. Si está implementando un flujo condicional para cadenas, puede usar condiciones if-else y puede usar una declaración de cambio si está usando Java 7 o posterior. Un pequeño ejemplo del uso de una cadena en una declaración switchy otro método que muestra la misma lógica usando condiciones 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");
        }
    }
}
El programa generará lo siguiente:
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)
Puntos clave de uso switchde cadenas en Java.
  • El uso de cadenas en el diseño switchhace que el código sea más legible al eliminar múltiples cadenas de condiciones if-else.
  • Las cadenas distinguen entre switchmayúsculas y minúsculas, el ejemplo anterior muestra esto.
  • El operador switchutiliza un método String.equals()para comparar el valor resultante con los valores de casos , así que agregue una marca de NULL para evitarlo NullPointerException.
  • Según la documentación de Java 7 para cadenas en switch, el compilador de Java genera un código de bytes más eficiente para cadenas en una construcción switchque para condiciones concatenadas if-else.
  • asegúrese de que esto se use con Java 7 o posterior; de lo contrario, obtendrá xception.

11. Escriba un programa que imprima todas las permutaciones de una cadena.

Esta es una pregunta complicada y tenemos que usar la recursividad para encontrar todas las permutaciones de una cadena, por ejemplo las permutaciones de "AAB" podrían ser "AAB", "ABA" y "BAA". También necesitamos usar Set para asegurarnos de que no tengamos filas duplicadas. Para obtener todas las permutaciones, primero tomamos el primer carácter de la cadena y reorganizamos los caracteres restantes. Si String = “ABC” Primer carácter char = A y las permutaciones restantes BC y CB. Ahora podemos insertar el primer carácter en las posiciones disponibles en las permutaciones. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Programa de ejemplo:
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));
    }
}
Salida del programa:
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]
Continuación del artículo.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION