"Olá, amigo!"

"Até onde eu sei, Rishi já falou sobre expressões regulares."

"Sim, foi muito interessante."

"Ótimo, agora vou falar sobre o uso de expressões regulares para trabalhar com Strings."

"Vamos começar com a pergunta mais simples:"

1) Como verifico se uma String corresponde ao padrão especificado por uma expressão regular?

"Existe um método matches para isso. Você passa uma String contendo uma expressão regular, e o método retorna verdadeiro ou falso."

Métodos) Exemplos)
boolean matches(String regex)
String s = "Good news, everyone!";
Boolean test = s.matches("news\\.*");
Resultado:

false (the String doesn't start with "news")

2) Como substituo todas as substrings correspondentes por strings diferentes?

"Existem dois métodos para isso."

"O método replaceAll substitui todas as ocorrências de uma substring por outra string."

"O método replaceFirst substitui a primeira ocorrência de uma substring passada por uma string especificada."

Métodos) Exemplos)
String replaceAll(String regex, String replacement)
String s = "Good news, everyone!";
String s2 = s.replaceAll ("e\\.","EX");
Resultado:

s2 == "Good nEXs EXEXyonEX";
String replaceFirst(String regex, String replacement)
String s = "Good news, everyone!";
String s2 = s.replaceFirst("e\\.","EX");
Resultado:

s2 == "Good nEXs, everyone!";

3) Como faço para dividir uma string em partes?

"Para isso, temos o método split, que pega uma máscara delimitadora:"

Métodos) Exemplos)
String[] split(String regex)
String s = "Good news everyone!";
String[] ss = s.split("ne");
System.out.println(Arrays.toString(ss));
Resultado (uma matriz de três strings):

[Good , ws everyo, !]
"Good ", "ws everyo", "!";

"A classe StringTokenizer é outra maneira de dividir uma string em partes ."

"Esta classe não usa expressões regulares. Em vez disso, você simplesmente passa uma String contendo um conjunto de delimitadores. A vantagem dessa abordagem é que ela não quebra a string inteira em pedaços de uma só vez, em vez disso, move-se lentamente de do começo ao fim."

"A classe consiste em um construtor e dois métodos. Você precisa passar a String que estamos desmembrando para o construtor, juntamente com uma String contendo o conjunto de caracteres delimitadores."

O método nextToken retorna o próximo token (substring).

O método hasMoreTokens() retorna true se ainda houver substrings que ainda não foram retornadas.

Métodos) Exemplos)
boolean hasMoreTokens()

String nextToken()
String s = "Good news, everyone!";

StringTokenizer tokenizer =
new StringTokenizer(s,"ne");
while (tokenizer.hasMoreTokens())
{
String token = tokenizer.nextToken();
System.out.println(token);
}
Saída da tela:

Good
ws
v
ryo
!

"Observe que qualquer caractere na segunda String passada para o construtor StringTokenizer é tratado como um delimitador."

"Mais uma vez, tudo parece claro. Talvez eu não consiga escrever esse código sozinho imediatamente, mas entendo o que está acontecendo aqui."

"Excelente, então assumiremos que você domina o assunto."