Um trecho de palestra com um mentor como parte do curso Codegym University. Inscreva-se no curso completo.
"Olá, amigo! Hoje vamos analisar alguns cenários mais comuns envolvendo o trabalho com strings. Por exemplo, você sabe dividir uma string em várias partes?"
"Eu não vou te contar agora, Ellie. Mas você vai me contar, certo?"
split()
método
"Existem várias maneiras de fazer isso. A primeira maneira de dividir uma string em várias partes é usar o split()
método. Uma expressão regular que define uma string de delimitação especial deve ser passada como um parâmetro. Você aprenderá o que é uma expressão regular em a missão Coleções Java .
Exemplo:
Código | Resultado |
---|---|
|
O resultado será um array de três strings:
|
Simples, mas às vezes essa abordagem é excessiva. Se houver muitos delimitadores (por exemplo, espaços, caracteres de nova linha, tabulações, pontos), será necessário construir uma expressão regular bastante complexa."
"Bem, claro. E se é difícil de ler, então é difícil fazer mudanças.
StringTokenizer
aula
Um trecho de palestra com um mentor como parte do curso Codegym University. Inscreva-se no curso completo.
"Java tem uma classe especial cujo trabalho é dividir uma string em substrings.
"Esta classe não usa expressões regulares: em vez disso, você simplesmente passa uma string que consiste em delimitadores. A vantagem dessa abordagem é que ela não quebra a string inteira em pedaços de uma só vez, mas move do começo ao fim um um passo de cada vez.
A classe tem um construtor e dois métodos. Passamos ao construtor uma string que dividimos em partes e uma string composta por um conjunto de caracteres delimitadores.
Métodos | Descrição |
---|---|
|
Retorna a próxima substring |
|
Verifica se há mais substrings. |
"Esta classe de alguma forma me lembra a classe Scanner, que também possui métodos nextLine()
e hashNextLine()
.
"Boa observação que você fez. Você pode criar um StringTokenizer
objeto com este comando:
StringTokenizer name = new StringTokenizer(string, delimiters);
Onde string é a string a ser dividida em partes. E delimitadores é uma string e cada caractere nela é tratado como um delimitador. Exemplo:
Código | Saída do console |
---|---|
|
|
"Observe que cada caractere na string passado na segunda string para o StringTokenizer
construtor é considerado um separador.
String.format()
método e StringFormatter
classe
"Outro método interessante da classe String é format()
.
"Digamos que você tenha várias variáveis armazenando dados. Como você as exibe na tela em uma linha? Por exemplo, temos alguns dados (coluna da esquerda) e a saída desejada (coluna da direita):
Código | Saída do console |
---|---|
|
|
O código para tal programa será mais ou menos assim:
código do programa |
---|
|
"Você vai concordar comigo que o código não é muito legível. E se os nomes das variáveis fossem mais longos, o código se tornaria ainda mais difícil:
código do programa |
---|
|
"Sim, é uma leitura difícil!"
"Não se preocupe. Esta é uma situação comum em programas do mundo real, então quero falar sobre uma maneira de escrever este código de forma mais simples e concisa.
String.format
"A String
classe tem um método estático format()
: permite especificar um padrão para montar uma string com dados. A aparência geral do comando é a seguinte:
String name = String.format(pattern, parameters);
Exemplo:
Código | Resultado |
---|---|
|
|
|
|
|
|
"O format()
primeiro parâmetro do método é uma string de formato que contém todo o texto desejado junto com caracteres especiais chamados especificadores de formato (como %d
e %s
) nos locais onde você precisa inserir dados.
"O format()
método substitui esses %s
e %d
os especificadores de formato pelos parâmetros que seguem a string de formato na lista de parâmetros. Se quisermos inserir uma string, escrevemos . %s
Se quisermos inserir um número, o especificador de formato é %d
. Exemplo:
Código | Resultado |
---|---|
|
s é igual a"a=1, b=4, c=3" |
"Aqui está uma pequena lista de especificadores de formato que podem ser usados dentro da string de formato:
especificador | Significado |
---|---|
|
String |
|
inteiro: byte , short , int ,long |
|
número real: float ,double |
|
boolean |
|
char |
|
Date |
|
% personagem |
"Esses especificadores indicam o tipo de dados, mas também existem especificadores que indicam a ordem dos dados. Para obter um argumento por seu número (a numeração começa em um), você precisa escrever " % 1$ d " em vez de " %d ". Exemplo:
Código | Resultado |
---|---|
|
s é igual a"a=13, b=12, c=11" |
%3$d
obterá o terceiro argumento, %2$d
obterá o segundo argumento e %d
obterá o primeiro argumento. Os especificadores de formato %s
e %d
referem-se a argumentos independentemente de especificadores como %3$d
ou%2$s
Conjunto de strings
"Toda string especificada no código como uma string literal é armazenada em uma área da memória chamada enquanto StringPool
o programa está sendo executado. StringPool
é uma matriz especial para armazenar strings. Sua finalidade é otimizar o armazenamento de strings:
"Primeiro, as strings especificadas no código devem ser armazenadas em algum lugar, certo? O código consiste em comandos, mas os dados (especialmente strings grandes) devem ser armazenados na memória separadamente do código. Somente referências a objetos de string aparecem no código.
"Segundo, todas as strings literais idênticas devem ser armazenadas na memória apenas uma vez StringPool
. já está lá, então simplesmente usamos uma referência de string do arquivo StringPool
.
Da mesma forma, se você atribuir o mesmo literal a várias variáveis String em seu código, essas variáveis conterão a mesma referência. Um literal será adicionado StringPool
apenas uma vez. Em todos os outros casos, o código obterá uma referência à string já carregada no arquivo StringPool
.
Aqui está mais ou menos como funciona:
Código | Trabalhando com StringPoll |
---|---|
|
|
"É por isso que as variáveis a
e b
armazenarão as mesmas referências."
"Espero ter entendido tudo corretamente.
intern()
método.
"E a melhor parte é que você pode adicionar programaticamente qualquer string ao StringPool
. Para fazer isso, basta chamar o método String
da variável .intern()
"O intern()
método adicionará a string ao StringPool
se ainda não estiver lá e retornará uma referência à string no arquivo StringPool
.
"E o que acontecerá se duas strings idênticas forem adicionadas ao StringPool
using the intern()
method?"
"O método retornará as mesmas referências. Isso pode ser usado para comparar strings por referência. Exemplo:
Código | Observação |
---|---|
|
|
|
|
É improvável que você use esse método com frequência. Dito isso, as pessoas gostam de perguntar sobre isso em entrevistas de emprego.
"Então, é melhor saber do que não saber. Obrigada, Ellie!"
GO TO FULL VERSION