Como Verificar se uma String Está em Maiúsculas em Java

JavaBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma string está em maiúsculas em Java. Exploraremos diferentes métodos para alcançar isso, começando por comparar a string original com sua versão em maiúsculas usando toUpperCase().

Em seguida, você aprenderá como iterar por uma string e usar o método Character.isUpperCase() para verificar o caso de caracteres individuais. Finalmente, abordaremos como lidar com caracteres não-letra dentro da string ao realizar essas verificações.

Comparar String com toUpperCase()

Nesta etapa, aprenderemos como comparar strings em Java, focando especificamente em como realizar comparações que não diferenciam maiúsculas e minúsculas (case-insensitive). Esta é uma tarefa comum em programação, por exemplo, ao verificar se um usuário digitou "sim", "Sim" ou "SIM".

Primeiro, vamos criar um novo arquivo Java chamado StringCompare.java no seu diretório ~/project. Você pode fazer isso clicando com o botão direito no File Explorer à esquerda e selecionando "New File", em seguida, digitando StringCompare.java.

Agora, abra o arquivo StringCompare.java no editor e adicione o seguinte código:

public class StringCompare {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "hello";

        // Case-sensitive comparison
        boolean areEqualCaseSensitive = str1.equals(str2);
        System.out.println("Case-sensitive comparison: " + areEqualCaseSensitive);

        // Case-insensitive comparison using toUpperCase()
        boolean areEqualCaseInsensitive = str1.toUpperCase().equals(str2.toUpperCase());
        System.out.println("Case-insensitive comparison using toUpperCase(): " + areEqualCaseInsensitive);
    }
}

Vamos detalhar este código:

  • Declaramos duas variáveis String, str1 e str2, com letras maiúsculas e minúsculas diferentes.
  • str1.equals(str2) realiza uma comparação que diferencia maiúsculas e minúsculas (case-sensitive). Retornará true somente se as strings forem exatamente iguais, incluindo o caso das letras.
  • str1.toUpperCase() converte str1 para todas as letras maiúsculas ("HELLO").
  • str2.toUpperCase() converte str2 para todas as letras maiúsculas ("HELLO").
  • Em seguida, usamos .equals() para comparar as versões em maiúsculas das strings, efetivamente realizando uma comparação que não diferencia maiúsculas e minúsculas (case-insensitive).

Salve o arquivo pressionando Ctrl + S (ou Cmd + S no Mac).

Agora, vamos compilar e executar este programa no Terminal. Certifique-se de estar no diretório ~/project.

Compile o código:

javac StringCompare.java

Se não houver erros, um arquivo StringCompare.class será criado.

Agora, execute o código compilado:

java StringCompare

Você deve ver a seguinte saída:

Case-sensitive comparison: false
Case-insensitive comparison using toUpperCase(): true

Esta saída demonstra que a comparação que diferencia maiúsculas e minúsculas (equals()) retorna false porque "Hello" e "hello" são diferentes devido ao uso de maiúsculas e minúsculas, enquanto a comparação que não diferencia maiúsculas e minúsculas usando toUpperCase() retorna true porque ambas as strings se tornam "HELLO" quando convertidas para maiúsculas.

Usar toUpperCase() (ou toLowerCase()) antes de comparar strings é uma maneira comum de realizar comparações que não diferenciam maiúsculas e minúsculas em Java.

Usar Character.isUpperCase() em um Loop

Na etapa anterior, aprendemos como comparar strings inteiras sem diferenciar maiúsculas e minúsculas. Agora, vamos explorar como examinar caracteres individuais dentro de uma string e determinar se eles estão em maiúsculas. Isso é útil quando você precisa analisar a estrutura de uma string, como contar letras maiúsculas ou validar o formato de entrada.

Java fornece a classe Character, que possui métodos úteis para trabalhar com caracteres individuais. Um desses métodos é isUpperCase(), que verifica se um determinado caractere é uma letra maiúscula.

Vamos modificar nosso arquivo StringCompare.java para demonstrar isso. Abra ~/project/StringCompare.java no editor e substitua seu conteúdo pelo seguinte código:

public class StringCompare {
    public static void main(String[] args) {
        String text = "Hello World";
        int uppercaseCount = 0;

        System.out.println("Analyzing the string: \"" + text + "\"");

        // Loop through each character in the string
        for (int i = 0; i < text.length(); i++) {
            char character = text.charAt(i); // Get the character at the current index

            // Check if the character is uppercase
            if (Character.isUpperCase(character)) {
                System.out.println("Found an uppercase character: " + character + " at index " + i);
                uppercaseCount++; // Increment the counter
            }
        }

        System.out.println("Total uppercase characters found: " + uppercaseCount);
    }
}

Vamos entender as novas partes deste código:

  • Declaramos uma variável String chamada text e uma variável inteira uppercaseCount inicializada com 0.
  • Usamos um loop for para iterar por cada caractere da string text. O loop é executado do índice 0 até (mas não incluindo) o comprimento da string.
  • text.charAt(i) obtém o caractere no índice atual i na string.
  • Character.isUpperCase(character) verifica se o caractere é uma letra maiúscula. Este método retorna true se o caractere estiver em maiúsculas e false caso contrário.
  • Se isUpperCase() retornar true, imprimimos uma mensagem indicando o caractere maiúsculo e seu índice, e incrementamos uppercaseCount.

Salve o arquivo (Ctrl + S).

Agora, compile e execute o programa modificado no Terminal a partir do diretório ~/project:

Compilar:

javac StringCompare.java

Executar:

java StringCompare

Você deve ver uma saída semelhante a esta:

Analyzing the string: "Hello World"
Found an uppercase character: H at index 0
Found an uppercase character: W at index 6
Total uppercase characters found: 2

Esta saída mostra que nosso programa identificou corretamente os caracteres maiúsculos 'H' e 'W' na string e os contou.

Usar Character.isUpperCase() dentro de um loop é uma técnica poderosa para analisar strings caractere por caractere. Na próxima etapa, consideraremos como lidar com caracteres que não são letras.

Lidar com Caracteres Não-Letras

Na etapa anterior, usamos Character.isUpperCase() para identificar letras maiúsculas. No entanto, strings podem conter mais do que apenas letras – elas podem incluir números, símbolos, espaços e pontuação. Ao analisar strings, é frequentemente necessário distinguir entre diferentes tipos de caracteres.

A classe Character fornece outros métodos úteis para esse fim, como:

  • Character.isLetter(char ch): Verifica se um caractere é uma letra.
  • Character.isDigit(char ch): Verifica se um caractere é um dígito (0-9).
  • Character.isWhitespace(char ch): Verifica se um caractere é um caractere de espaço em branco (como espaço, tabulação, nova linha).

Vamos modificar nosso arquivo StringCompare.java novamente para demonstrar como lidar com caracteres que não são letras e contar diferentes tipos de caracteres em uma string. Abra ~/project/StringCompare.java no editor e substitua seu conteúdo pelo seguinte código:

public class StringCompare {
    public static void main(String[] args) {
        String text = "Hello World 123!";
        int letterCount = 0;
        int digitCount = 0;
        int whitespaceCount = 0;
        int otherCount = 0;

        System.out.println("Analyzing the string: \"" + text + "\"");

        // Loop through each character in the string
        for (int i = 0; i < text.length(); i++) {
            char character = text.charAt(i); // Get the character at the current index

            // Check the type of the character
            if (Character.isLetter(character)) {
                letterCount++;
            } else if (Character.isDigit(character)) {
                digitCount++;
            } else if (Character.isWhitespace(character)) {
                whitespaceCount++;
            } else {
                otherCount++; // Characters that are not letters, digits, or whitespace
            }
        }

        System.out.println("Total characters: " + text.length());
        System.out.println("Letter count: " + letterCount);
        System.out.println("Digit count: " + digitCount);
        System.out.println("Whitespace count: " + whitespaceCount);
        System.out.println("Other character count: " + otherCount);
    }
}

Neste código atualizado:

  • Inicializamos contadores para letras, dígitos, espaços em branco e outros caracteres.
  • Dentro do loop, usamos instruções if-else if-else para verificar o tipo de cada caractere usando Character.isLetter(), Character.isDigit() e Character.isWhitespace().
  • Incrementamos o contador correspondente com base no tipo de caractere.
  • Finalmente, imprimimos as contagens para cada tipo de caractere.

Salve o arquivo (Ctrl + S).

Agora, compile e execute o programa no Terminal a partir do diretório ~/project:

Compilar:

javac StringCompare.java

Executar:

java StringCompare

Você deve ver uma saída semelhante a esta:

Analyzing the string: "Hello World 123!"
Total characters: 16
Letter count: 10
Digit count: 3
Whitespace count: 2
Other character count: 1

Esta saída identifica e conta corretamente os diferentes tipos de caracteres na string "Hello World 123!". As letras são 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' (10 no total). Os dígitos são '1', '2', '3' (3 no total). Os caracteres de espaço em branco são o espaço entre "Hello" e "World", e o espaço entre "World" e "123" (2 no total). O outro caractere é '!' (1 no total). A contagem total é 10 + 3 + 2 + 1 = 16, que corresponde ao comprimento da string.

Ao usar métodos como Character.isLetter(), Character.isDigit() e Character.isWhitespace(), você pode escrever um código mais robusto que pode lidar com vários tipos de caracteres dentro de uma string. Isso é crucial para tarefas como validação de dados, análise de entrada ou análise de texto.

Resumo

Neste laboratório, aprendemos como verificar se uma string está em maiúsculas em Java. Exploramos dois métodos principais. Primeiro, comparamos uma string com sua versão em maiúsculas usando o método toUpperCase() e o método equals() para realizar uma comparação que não diferencia maiúsculas e minúsculas. Este método é útil para verificar se duas strings são iguais, independentemente de suas letras maiúsculas ou minúsculas.

Em segundo lugar, aprendemos como iterar por uma string e usar o método Character.isUpperCase() dentro de um loop para verificar se cada caractere é uma letra maiúscula. Também consideramos como lidar com caracteres que não são letras durante esse processo, garantindo que nossa verificação seja robusta. Essas técnicas fornecem diferentes abordagens para determinar o status de maiúsculas de uma string com base nos requisitos específicos da tarefa.