Classes

Classes de Texto

Classes de texto

Em linguagem de programação, textos são compostos por um conjunto de caracteres, números e símbolos com a proposta de resultar em conteúdo e informação.

Classes de Texto

Em se tratando de classes na linguagem Java responsáveis para representar conteúdos de tipo texto, podemos citar inicialmente três delas:

Se as três possuem a mesma proposta, como e quando usar cada uma delas ?

java.lang.String

A classe java.lang.String representa cadeias de caracteres. Todos os literais de string em programas Java, como "abc", são implementados como instâncias dessa classe.

Strings são constantes; seus valores não podem ser alterados depois de criados. Buffers de string suportam strings mutáveis. Como os objetos String são imutáveis, eles podem ser compartilhados, por exemplo:

A classe String inclui métodos para examinar caracteres individuais da sequência, comparar strings, pesquisar strings, extrair substrings (pedaços) e criar uma cópia de uma string com todos os caracteres traduzidos para letras maiúsculas ou minúsculas. O mapeamento no caso é baseado na versão Unicode Standard especificada pela classe java.lang.Character.

Vamos aos exemplos:

public class StringApp {
    public static void main(String[] args) {
       String str = "abc";
     
       //é equivalente a:
       char data[] = {'a', 'b', 'c'};
       String str1 = new String(data);
     
       //aqui mais alguns recursos oferecidos pela classe String
       System.out.println("abc");
       String cde = "cde";
       System.out.println("abc" + cde);
       String c = "abc".substring(2,3);
       String d = cde.substring(1, 2);
       
       String password = "Sup3rP@ss!$%*&";
    }
}

Percebemos acima que um tipo texto (string) suporta qualquer tipo de caractere, mas devemos ter consciência que linguagens de tipagem rígida como o Java possui relevância quanto aos tipos definidos.

Canivete

Evite usar a classe String como se fosse um canivete suíço, veja o cenário abaixo ☠️.
public class StringApp {
    public static void main(String[] args) {
        String cep          = "64000020";       // -> Integer
        String celular      = "11954360978";    // -> Long
     
     
        String cpf          = "03387634509";    // ?
        String estadoCivil  = "SOLTEIRO";       // Enum        

    }
}
Quer conhecer todo o poder da classe String? Clique aqui!

java.lang.StringBuilder

Chegou a hora de conhecer as irmãs da classe String, a java.lang.StringBuilder e java.lang.StringBuffer, mas afinal por que tantas classes para utilizar em uso de caracteres na linguagem Java?

Primeiramente precisamos entender um fundamento extremamente relevante quando falamos em programação como um todo, o consumo de recurso de memória e como a linguagem Java define uma estratégia que melhor responde à este requisito que conhecemos como o princípio da imutabilidade e o Poll Strings, conceitos estes apresentados majestosamente pela Giuliana Bezerra.

Pool de Strings

Diferentemente da classe String, as classes StringBuilder e StringBuilder podem sofrer alterações em seus conteúdos realizando operações conforme listagem abaixo:

  • append (acrescentar)
  • insert (inserir)
  • replace (substituir)
  • delete (remover)
public class StringApp {
    public static void main(String[] args) {
        StringBuilder stringAlteravel = new StringBuilder("gleyson ");

        //  acrescentando o conteúdo sampaio
        stringAlteravel.append("sampaio");

        //  substituindo o nome gleyson (os 7 digitos) para izabelly
        stringAlteravel.replace(0,7,"izabelly");

        //removendo o nome sampaio com um spaço no início
        stringAlteravel.delete(8,16);

        /*
            inserindo o conteúdo sampaio novamente
            a diferença entre insert e append é que o insert possibilita informar a posição
            inclusive no início do conteúdo
        */
        stringAlteravel.insert(8," sampaio");
        stringAlteravel.insert(0,"Miss ");

        
        System.out.println(stringAlteravel.toString());
    }
}
StringBuilder não é uma String mas sim um objeto que contém uma String
    System.out.println(stringAlteravel.toString());

E quanto a StringBuffer o que eu preciso saber? Pouca coisa, só que ela é um clone da StringBuilder e que proporciona segurança em contexto de Multi-thread reduzindo um pouco a performance.

   public class StringApp {
   public static void main(String[] args) {
   
        StringBuffer builder = new StringBuffer();
        int start = LocalDateTime.now().getNano();
        for(int caractere = 1; caractere<=1000000; caractere++){
            builder.append(caractere);
            builder.append("\n");
        }
        //System.out.println(builder.toString());
        System.out.println("Nano:" + (LocalDateTime.now().getNano() - start));
   
    }
   }
Agora que você sabe o uso das classes String, StringBuilder e StringBuffer exercite um pouco mais cada uma delas para tirar de letra os desafios do dia-a-dia.