"O que você acha, amigo? Qual é a classe Java mais popular depois de int?"

"Você já me deu um spoiler no título da aula, Ellie. É String!"

"Na verdade, é um spoiler. Stringé usado absolutamente em todos os lugares. Tem um monte de métodos úteis que é melhor você conhecer.

"A Stringclasse é a única classe além dos tipos primitivos cujos literais podem ser usados ​​em uma switchinstrução; o compilador manipula a adição de strings e os objetos String de uma maneira especial; Stringos objetos são armazenados na memória de uma maneira especial. Basicamente, a Stringclasse é uma classe muito classe especial.

"Além disso, a Stringclasse tem várias classes auxiliares cuja finalidade é simplificar ainda mais o trabalho com strings em Java. Quando você aprender tudo isso, muitas coisas se tornarão muito mais fáceis de fazer."

"Mal posso esperar."

"Bem, começaremos do centro desse ecossistema — a organização da Stringclasse. A estrutura da Stringclasse é realmente muito simples: dentro dela há um array de caracteres ( chararray) que armazena todos os caracteres da string. Para exemplo, é assim que a palavra 'Hello' é armazenada:

Estrutura da classe String

É importante.

Na verdade, isso não é muito preciso. Como a Stringclasse é muito importante, ela usa muitas otimizações e os dados são armazenados internamente não como uma matriz de caracteres, mas simplesmente como uma matriz de bytes.

Métodos da classe String

A Stringclasse tem muitos métodos: só ela tem 18 construtores! Então, abaixo listarei apenas os mais usados:

Métodos Descrição
int length()
Retorna o número de caracteres na string
boolean isEmpty()
Verifica se a string é uma string vazia
boolean isBlank()
Verifica se a string contém apenas caracteres de espaço em branco: espaço, tabulação, nova linha, etc.
char charAt(int index)
Retorna o caractere na posição do índice na string.
char[] toCharArray()
Retorna um array dos caracteres (uma cópia) que compõem a string
byte[] getBytes()
Converte uma string em um conjunto de bytes e retorna a matriz de bytes.
String[] split(String regex)
Divide uma string em várias substrings.
String join(CharSequence delimiter, elements)
Une várias substrings juntas
String intern()
Coloca uma string no pool de strings.

"Isso parece muito bom!"

"Vamos escrever um programa que converta um caminho de arquivo do estilo Unix para o estilo Windows. O Unix usa o /caractere para separar pastas, enquanto o Windows usa o \caractere.

Solução 1. Usando uma charmatriz

Código Notas
Scanner console = new Scanner(System.in);
String path = console.nextLine();

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
Criar um objeto Scanner
Ler uma linha do console

Converter uma string em uma matriz de caracteres
Percorrer os caracteres
Se o caractere for /,
substitua-o por \. Não se esqueça de escapar.

Crie uma nova string com base na matriz de caracteres.
Exiba a cadeia de caracteres.

Solução 2. Usando os métodos split()e join():

Código Notas
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String array[] = path.split("\\/");


String result = String.join("\\", array);


System.out.println(result);
Criar um objeto Scanner
Ler uma linha do console

Converter string em um array de strings . O /caractere é usado como separador (as duas barras extras são o resultado de escape duplo).
Concatene todas as strings na matriz de strings . O \é usado como um separador (vemos que escapou).

Exiba a cadeia de caracteres.

Solução 3. Usando o replace(char oldChar, char newChar)método:

Código Notas
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String result = path.replace('/', '\\');

System.out.println(result);
Crie um objeto Scanner
Leia uma linha do console

Simplesmente substitua um caractere por outro
(o segundo é escapado)
Exiba a string.

"Gostei mais da terceira solução. Mas vou praticar as três."

"Muito bem, amigo. Vejo que você já está impaciente para colocar em prática seus novos conhecimentos. A aula acabou."