Você está na página 1de 2

Usando o método split() da classe String

por Miguel Jonathan – DCC/IM/UFRJ (junho de 2010)

O método String[] split (exprRegular) da classe String aceita como argumento uma string com
uma expressão regular, que define os separadores (delimitadores) das palavras presentes no texto. A
expressão tem a forma: "sep1|sep2|....|sepn" onde sepi são as substrings usadas como delimitadores
de palavras, e o caractere '|' significa "ou".
Por exemplo, o texto:
"um, dois, tres, quatro cinco:são números"
usa 3 substrings como separadores das palavras:
", " (uma vírgula seguida de um espaço)
":" (um caractere dois pontos)
" " (um espaço)
Para obter um vetor com as palavras do texto acima, fazemos:
String[] vet = texto.split(", |:| ");
(note que o argumento do método é uma única string )
Neste exemplo, o vetor vet será criado com tamanho e conteúdo abaixo:
"um" "dois" "tres" "quatro" "cinco" "são" "números"
vet[0] vet[1] vet[2] vet[3] vet[4] vet[5] vet[6]

Atenção: se o texto contiver um separador seguido de outro, será criada uma string vazia
entre os delimitadores ("").
Por exemplo, se o texto for:
"um,,dois,,três"
e se o delimitador for "," (uma vírgula apenas), será criada no vetor uma string vazia após cada
palavra:
String[] vet = "um,,dois,,três".split(",")
O vetor vet ficará com o conteúdo abaixo:
"um" "" "dois" "" "três"
vet[0] vet[1] vet[2] vet[3] vet[4]

Meta-caracteres
As expressões regulares usam caracteres como "|" nos exemplos acima, para descrever o sentido
da expressão. Eles são chamados de meta-caracteres. Os meta caracteres usados são:
| * ? \ . + - [ ] ^
Significado:
* zero ou mais vezes o caractere anterior: "1a*2" inclui "12" "1a2" "1aaaa2"
+ uma ou mais vezes o caractere anterior: "1a+2" inclui "1a2" "1aaaaa2", mas não "12"
. qualquer caractere: "xx.zz" inclui "xx3zz" "xxyzz" "xxHzz" "xx?zz"
[inicio-fim]: sub-conjunto de caracteres ASCII: "[b-h][X-Z][0-9]" inclui "bX1" "dY2" "fZ5"
^ exclusão: "a[^0-9]b" inclui "axb" "adb" "a/b", mas não "a2b" "a5b"
Caso se queira que um delimitador inclua um dos meta-caracteres, este deve ser precedido por
uma barra invertida de escape (\). Dentro de uma string literal entre aspas, deve ser precedido de
duas barras invertidas.
Por exemplo, se os separadores forem um ponto ou um ou mais asteriscos, a expressão regular seria:
"\\.|\\*+"
Exemplo: abc.cde***fgh.klm*ppp".split("\\.|\\*+");
Retorna um vetor contendo strings: "abc", "cde", "fgh", "klm", "ppp"

Caracteres especiais:
São precedidos por uma barra transversa, chamada "barra de escape", e têm significados especiais
nas expressões regulares:
\d = um dígito
\D = um "não dígito"
\s = um espaço
\S = qualquer caractere que não um espaço
\w = uma letra, dígito ou sublinhado
\W = qualquer caractere que não uma letra, dígito ou sublinhado.
OBS: Dentro de uma string, a barra deve ser duplicada:
Exemplos:
"a\\dx" inclui "a5x" "a7x"
"a\\Dx" inclui "abx" "a$x", mas não "a5x"
"[a-z]\\w*" inclui qualquer palavra que começa com letra minúscula, seguida por zero ou
mais letras, dígitos ou underscores.

Uso da barra transversa como separador:


Não é aconselhável, mas, se quiser, terá que colocar duas barras na expressão da string, e quatro
barras na expressão do separador!
Por exemplo:
String s = "abc\\def\\ghij"
s.split("\\\\");