JavaRush /Blogue Java /Random-PT /Sequência Java. Perguntas e respostas da entrevista, part...
Andrey
Nível 26

Sequência Java. Perguntas e respostas da entrevista, parte 1

Publicado no grupo Random-PT
A classe Stringé uma das classes mais usadas em Java. Este artigo fornece algumas perguntas e respostas importantes da entrevista sobre Java String. Sequência Java.  Perguntas e respostas da entrevista, parte 1 - 1Eles serão muito úteis para obter uma visão completa da aula Stringe irão prepará-lo para qualquer Stringpergunta da entrevista relacionada à aula.

1. O que é String em Java? Que tipo de dados é esse?

String é uma classe em Java definida no pacote java.lang. Não é um tipo de dados primitivo como int e long. A classe String representa um conjunto de caracteres de string. Strings são usadas em quase todos os aplicativos Java e há alguns fatos que devemos saber sobre a classe String. É um immutabletipo de dados imutável ( ) e finalizado em Java e Stringa máquina virtual armazena todos os objetos da classe em um pool de strings. Outra funcionalidade Stringé a forma de obter objetos de classe Stringutilizando aspas duplas e sobrecarregando o operador “+” para concatenação.

2. Quais são as diferentes maneiras de criar um objeto String?

Podemos criar objetos usando o operador new como qualquer outra classe em Java ou podemos usar aspas duplas para criar um objeto String. Existem também vários construtores de classes Stringpara obter uma string de uma matriz de caracteres, uma matriz de bytes e também usar StringBufferou StringBuilder.
String str = new String("abc");
String str1 = "abc";
Quando criamos uma string usando aspas duplas, a Java Virtual Machine procura no pool de strings outra string com o mesmo valor. Se a string for encontrada, apenas uma referência a um objeto existente da classe será retornada String, caso contrário, um novo objeto será criado com o valor recebido e armazenado no pool. Quando usamos o operador new, a máquina virtual cria um objeto String, mas não o armazena no pool de strings. Podemos usar o método intern()para armazenar uma string em um pool de strings ou obter uma referência se tal string já estiver no pool.

3. Escreva um método para verificar se uma string é um palíndromo.

Uma string é chamada de palíndromo se tiver a mesma leitura em ambas as direções. Por exemplo, “aba” é uma string palindrômica. A classe Stringnão fornece nenhum método para reverter uma string, mas as classes StringBufferpossuem StringBuilderum método de reversão com o qual podemos verificar se nossa string é um palíndromo ou não.
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
Às vezes o entrevistador pode pedir para não usar outras classes para esta verificação, caso em que podemos comparar os caracteres da string em ambos os lados para verificar se há 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. Escreva um método para remover um determinado caractere de uma string.

Podemos usar um método replaceAllpara substituir todas as ocorrências de uma string por outra string. Observe que o método usa uma string como argumento, então usamos a classe Characterpara criar uma string a partir de um caractere e a usamos para substituir todos os caracteres pela string vazia.
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. Como podemos converter uma string para maiúscula ou minúscula?

Podemos usar métodos de classe String toUpperCasepara toLowerCaceobter strings maiúsculas e minúsculas. Esses métodos possuem uma sobrecarga que recebe um argumento Localee usa suas regras de localização para converter a string em maiúsculas ou minúsculas.

6. O que o método subSequence faz?

Java 1.4 introduziu a interface CharSequence, uma classe Stringherda essa interface e essa é a única razão para implementar um método subSequenceem uma classe String. Internamente ele chama o substring. Um exemplo simples de uso do 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))));
    }
}
A saída do programa mostrará o seguinte:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
O ideal é que você sempre use o substring.

7. Como comparar duas strings em Java?

A classe Stringherda a interface Comparablee possui duas opções de método compareTo(). O método compareTo(String anotherString)compara lexicograficamente o objeto Stringcom o argumento recebido String. Se a linha atual preceder a string recebida, o método retornará um número inteiro negativo, e se a string seguir o argumento recebido, ele retornará um número inteiro positivo integer. Se o método retornar 0, então a string terá o mesmo valor; nesse caso, o método equals(String str)também retornará verdadeiro. compareToIgnoreCase(String str): Este método é semelhante ao anterior, exceto que ignora maiúsculas e minúsculas. Ele usa o comparador CASE_INSENSITIVE_ORDER para comparação sem distinção entre maiúsculas e minúsculas. Se o valor de retorno for zero, o método equalsIgnoreCase(String str)também retornará verdadeiro. Vejamos um pequeno exemplo para explicar esses 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"));
    }
}
O programa produzirá o seguinte:
-3
0

8. Como converter uma string em caractere e vice-versa?

Esta é uma pergunta capciosa porque uma string é uma sequência de caracteres, então só podemos convertê-la em um único caractere. Podemos usar um método charAtpara localizar o caractere em uma posição especificada ou podemos usar um método toCharArray()para converter uma string em um array de caracteres. Um exemplo simples que mostra como converter string em caractere e caractere em string em 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 ), "");
    }
}
O programa produzirá o seguinte:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. Como converter uma string em um array de bytes e vice-versa?

Podemos usar um método getBytes()para converter uma string em um array de bytes e podemos usar um construtor new String(byte[] arr)para converter um array de bytes em uma string.
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)));
    }
}
O programa produzirá o seguinte:
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 uma string em uma construção switch?

Esta pergunta complicada é usada para testar seu conhecimento sobre o desenvolvimento atual da linguagem. Java 7 estende a instrução switch para usar strings; versões anteriores do Java não suportam isso. Se você estiver implementando um fluxo condicional para strings, poderá usar condições if-else e uma instrução switch se estiver usando Java 7 ou posterior. Um pequeno exemplo de uso de uma string em uma instrução switche outro método que mostra a mesma lógica usando condições 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");
        }
    }
}
O programa produzirá o seguinte:
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)
Principais pontos de uso switchpara strings em Java.
  • o uso de strings no design switchtorna o código mais legível, eliminando múltiplas cadeias de condições if-else.
  • strings diferenciam switchmaiúsculas de minúsculas, o exemplo acima mostra isso.
  • O operador switchusa um método String.equals()para comparar o valor resultante com valores de caso , portanto, adicione uma verificação de NULL para evitar NullPointerException.
  • De acordo com a documentação do Java 7 para strings em switch, o compilador Java gera bytecode mais eficiente para strings em uma construção switchdo que para condições concatenadas if-else.
  • certifique-se de que isso será usado com Java 7 ou posterior, caso contrário você obterá arquivos xception.

11. Escreva um programa que imprima todas as permutações de uma string.

Esta é uma questão complicada e temos que usar recursão para encontrar todas as permutações de uma string, por exemplo as permutações de “AAB” poderiam ser “AAB”, “ABA” e “BAA”. Também precisamos usar Set para garantir que não teremos linhas duplicadas. Para obter todas as permutações, primeiro pegamos o primeiro caractere da string e reorganizamos os caracteres restantes. Se String = “ABC” Primeiro caractere char = A e permutações restantes BC e CB. Agora podemos inserir o primeiro caractere nas posições disponíveis nas permutações. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Exemplo de programa:
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));
    }
}
Saída do 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]
Continuação do artigo
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION