• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Expressões Regulares – Números e Letras

August 21, 2017 by Mauda Leave a Comment

Conteúdo do Post:
  1. Expressões Regulares
  2. método de teste somenteNumeroStringTamanho1()
  3. método de teste semNumeroStringTamanho1()
  4. método de teste somenteLetraOuNumeroStringTamanho1()
  5. método de teste semLetraOuNumeroStringTamanho1()
  6. Adicionando o quantificador *
  7. finally{

Olá Pessoal, tudo bom?

No artigo de hoje iremos começar a explicar algumas expressões regulares úteis para o dia a dia, no caso a trabalhar com números e letras. Veja na continuação desse artigo.

Expressões Regulares

Uma das coisas que, independente da linguagem de programação, poucos desenvolvedores dominam são as expressões regulares. O formato dessas expressões indica uma forma de encontrar um determinado padrão de caracteres (pattern) dentro de uma String. Esse formato pode ser muito simples ou extremamente complexo, dependendo do que está sendo usado para compor essa expressão.

A composição desse formato é estabelecida por três categorias:

  1. Meta-Caracteres
  2. Intervalos e Simbolos reservados
  3. Quantificadores

Ainda assim, é possível usar apenas uma dessas categorias e uma expressão regular estará construída. Para maiores detalhes de todas as expressões que existem isoladamente no Java veja a API da classe Pattern ((API da classe Pattern  – link))

Nesse artigo o foco da expressão regular será sobre uma String de tamanho 1, indicando se a String possui letras ou números. Veja na tabela abaixo:

Expressão Regular O que significa?
\\d Um Número
\\D Qualquer coisa MENOS Número
\\w Uma Letra ou Número
\\W Qualquer coisa MENOS letra ou número

Agora vamos exemplificar alguns testes somente com Meta-Caracteres. Suponha a classe de teste JUnit abaixo:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package br.com.mauda.expressoes.regulares;
 
import org.junit.Assert;
import org.junit.Test;
 
public class PatternsTeste {
@Test
public void somenteNumeroStringTamanho1() {
String stringASerValidada = "A";
String pattern = "\\d";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = ",";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "12";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1A";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "AB";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "A2";
Assert.assertFalse(stringASerValidada.matches(pattern));
}
@Test
public void semNumeroStringTamanho1() {
String stringASerValidada = "A";
String pattern = "\\D";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "1";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = ",";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "12";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1A";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "AB";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "A2";
Assert.assertFalse(stringASerValidada.matches(pattern));
}
@Test
public void somenteLetraOuNumeroStringTamanho1() {
String stringASerValidada = "A";
String pattern = "\\w";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "1";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = ",";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "12";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1A";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "AB";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "A2";
Assert.assertFalse(stringASerValidada.matches(pattern));
}
@Test
public void semLetraOuNumeroStringTamanho1() {
String stringASerValidada = "A";
String pattern = "\\W";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = ",";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "12";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1A";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "AB";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "A2";
Assert.assertFalse(stringASerValidada.matches(pattern));
}
}

Vamos agora explicar cada método de teste e seus resultados:

método de teste somenteNumeroStringTamanho1()

Esse método possui a premissa de testar uma String, cujo tamanho é 1 e contenha somente números. Assim um exemplo prático é uma String que represente um número de 0 a 9. Assim o único resultado verdadeiro será um número.  Strings com tamanho maior que 1 terão resultado falso assim como qualquer outro elemento não sendo um número.

método de teste semNumeroStringTamanho1()

Esse método possui a premissa de testar uma String, cujo tamanho é 1 e não contenha números. Assim um exemplo prático é uma String que represente  uma letra de a-z ou A-Z ou mesmo um caractere especial, como uma “,”. Assim no nosso método de teste existem dois resultados verdadeiros, a letra “A” e a virgula “,”. Strings com tamanho maior que 1 terão resultado falso assim como números.

 

método de teste somenteLetraOuNumeroStringTamanho1()

Esse método possui a premissa de testar uma String, cujo tamanho é 1 e contenha somente números ou letras. Assim um exemplo prático é uma String que represente uma letra de a-z ou A-Z ou um número de 0 a 9. Assim no nosso método de teste existem dois resultados verdadeiros, a letra “A” e o número “1”. Strings com tamanho maior que 1 terão resultado falso assim como caracteres especiais.

 

método de teste semLetraOuNumeroStringTamanho1()

Esse método possui a premissa de testar uma String, cujo tamanho é 1 e não contenha números ou letras. Assim um exemplo prático é uma String que represente um caractere especial, como uma “,”. Assim o único resultado verdadeiro será a virgula “,”. Strings com tamanho maior que 1 terão resultado falso assim como letras e números.

Adicionando o quantificador *

Se adicionar o quantificador * as expressões como ficaria nossos resultados? Vamos primeiro modificar nossa tabela:

Expressão Regular O que significa?
\\d* Uma String formada apenas por números
\\D* Uma String formada por qualquer coisa MENOS Número
\\w* Uma String formada apenas por letras ou Números
\\W* Uma String formada por qualquer coisa MENOS letras ou números

Entendeu para que serve o quantificador *. Ele indica zero ou mais repetições de um determinado padrão na String a ser avaliada. Agora vamos exemplificar alguns testes somente com Meta-Caracteres. Vamos modificar a classe de teste JUnit abaixo com as novas expressões:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package br.com.mauda.expressoes.regulares;
 
import org.junit.Assert;
import org.junit.Test;
 
public class PatternsTeste {
@Test
public void somenteNumeroStringTamanho1() {
String stringASerValidada = "A";
String pattern = "\\d*";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = ",";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "12";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "1A";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "AB";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "A2";
Assert.assertFalse(stringASerValidada.matches(pattern));
}
@Test
public void semNumeroStringTamanho1() {
String stringASerValidada = "A";
String pattern = "\\D*";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "1";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = ",";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "12";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1A";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "AB";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "A2";
Assert.assertFalse(stringASerValidada.matches(pattern));
}
@Test
public void somenteLetraOuNumeroStringTamanho1() {
String stringASerValidada = "A";
String pattern = "\\w*";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "1";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = ",";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "12";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "1A";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "AB";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "A2";
Assert.assertTrue(stringASerValidada.matches(pattern));
}
@Test
public void semLetraOuNumeroStringTamanho1() {
String stringASerValidada = "A";
String pattern = "\\W*";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = ",";
Assert.assertTrue(stringASerValidada.matches(pattern));
stringASerValidada = "12";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "1A";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "AB";
Assert.assertFalse(stringASerValidada.matches(pattern));
stringASerValidada = "A2";
Assert.assertFalse(stringASerValidada.matches(pattern));
}
}

Perceba que a maior modificação nos resultados foram os testes com tamanho maior que 1. Agora a classe de teste passa a validar também essas Strings que antes sempre retornavam false para qualquer tamanho maior que 1.

finally{

É possível utilizar essas expressões regulares para substituir caracteres em uma String, de uma olhada no método replaceAll ((API da classe String – método replaceAll – link)) da classe String!

No futuro iremos descrever situações do dia a dia sobre como aplicar expressões regulares, fique ligado!

Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!

Até um próximo post!

 

 

Filed Under: Java Tagged With: expressôes regulares, Java, pattern, regex, String

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2022 · Genesis Framework · WordPress · Log in