Duvida regex, alguem se habilita?

7 respostas
G

Ola pessoal, acabei de terminar o capitulo 6 do livro sobre regex, tokenizing, I/O…etc… entao eu e minha brilhante mente descidimos fazer uns mocks no Whizlabs, e nos deparamos com um de meus milhares de erros… quando fui testar para ver se era isso mesmo o resultado nao deu algo compreensivel pra mim. da uma olhada:

class Test{
	public static void main(String[] args)
	{
		String str = "aaaaaaaaabb";
		String[] s = str.split("a{3}");
		System.out.println(s.length);
	}
}

Alguem consegue me explicar porque o resultado da 4 ???

7 Respostas

renzonuccitelli

a regex quer dizer sequencia de 3 a’s. assim, ele divide sua String em {aaa,aaa,aaa,bb} que possui lenght 4…

G

Nao sei se estou certo mas testando um pouquinho a mais aqui eu percebi que o “bb” mesmo assim eh adicionado no array, porque ele simplesmente divide isso a cada 3 letras “a”, estou certo?..

G

ah… entendi, era isso mesmo. Valeu!

renzonuccitelli

qdo for assim, imprime todos os elementos do array pra ver como ele separou…

G

cara entao me explica uma coisa… porque testando isso:

class Test{
	public static void main(String[] args)
	{
		String str = "aaaaaaaaa";
		String[] s = str.split("a{3}");
		System.out.println(s.length);
	}
}

resulta em 0?? :shock:

T

gumatias:
Ola pessoal, acabei de terminar o capitulo 6 do livro sobre regex, tokenizing, I/O…etc… entao eu e minha brilhante mente descidimos fazer uns mocks no Whizlabs, e nos deparamos com um de meus milhares de erros… quando fui testar para ver se era isso mesmo o resultado nao deu algo compreensivel pra mim. da uma olhada:

class Test{
	public static void main(String[] args)
	{
		String str = "aaaaaaaaabb";
		String[] s = str.split("a{3}");
		System.out.println(s.length);
	}
}

Alguem consegue me explicar porque o resultado da 4 ???

Pra começar, vamos rodar este programa e ver qual é o resultado de split. A forma mais simples é assim:

import java.util.*;
class Test{
	public static void main(String[] args)
	{                     |___|===|___|bb
		String str = "aaaaaaaaabb";
		String[] s = str.split("a{3}");
		System.out.println(s.length);
		for (int i = 0; i < s.length; ++i) {
                    System.out.println ("<" + s[i] + ">");
                }
	}
}

Ele imprime:

<>
<>
<>
<bb>

Ou seja, s contém 3 strings vazias ("") e uma com o valor “bb”.
Note que split é uma coisa que procura delimitadores, não padrões - ou seja, o padrão que você passa para split serve para SEPARAR os valores, não para DETERMINAR os valores.

G

Brigado pela explicacao thingol! ja entendi! :lol:

Criado 22 de janeiro de 2009
Ultima resposta 22 de jan. de 2009
Respostas 7
Participantes 3