Dúvida questão Regex

6 respostas
Gustavo_Santos
public static void main(String[] args) {
		String test = "Test A. Test B. Test C.";
		// insert code here
		String regex = "\\.\\s*";
		String[] result = test.split(regex);
		
		for(String s : result) {
			System.out.println(s + " ");
		}
	}

Galera a questão do testKiller quer que isso seja impresso:
Test A
Test B
Test C

Eu errei essa questão pelo fato de que eu leio/ interpreto esse padrão (\.\s*) da seguinte maneira:

"zero ou mais ocorrências, de qualquer caracter seguido de um espaço."
Na minha cabeça, dessa forma o resultado ficaria:
Test
A.
Test
B.
Test
C.

Não entendi porque a primeira saída é a correta ! Alguém dá uma forcinha aqui ?!

Grato a todos que ajudarem!

6 Respostas

Eric_Yuzo

A regex está considerando o ponto (\.) seguido de espaço (\s).

Gustavo_Santos

Porque ? E quando isso acontece ?!

evertonsilvagomesjav

Veja só vc ta dando um split de um “.” seguido de um “espaço”.

Igual vc falou que iria conter somente “Test” veja so:

Test -> aqui nao tem um “ponto” entao nao tem como ser esta saida pois o split é de um “ponto” seguido de “espaço”, seria que ser “Test. A”. Ai sim o primeiro elemento do array seria “Test” e o segundo “A”

Entao vc tem:

Test A. Test B. Test C.

Como á regra do split é “ponto” seguido de “espaço”:

Test A.espaçoTestB.espaçoTest C.

Por isso a saida é essa: Test A Test B Test C.

Eric_Yuzo

Foi mal. Respondi rápido nem considerei o asterisco. :XD:

No caso a regex está pegando o ponto (\.) seguido de nenhum, um ou vários espaços (\s*).

Mal pelo erro. :oops:

Gustavo_Santos

o . (ponto) não significa qualquer caracter ?!

evertonsilvagomesjav

com “\.” não, so se vc fizer “.”

Criado 12 de setembro de 2010
Ultima resposta 12 de set. de 2010
Respostas 6
Participantes 3