Regex

4 respostas
wagnerlegiao

Pessoal, dúvida rápida:
Preciso saber como buscar todas as strings que comecem com a seguido de qualquer caracter e seguido de a novamente.
ou seja
aea
awa
a8a

Segue o fonte

public static void main(String... a){
		
		Pattern p = Pattern.compile("(a.a)+");
		String match = "ac aba a a";
		Matcher m = p.matcher(match);
		boolean b;
		while(b = m.find()){
			System.out.println(match.substring(m.start(),m.end()));
		}
	}

Porém ele nao dá o resultado que quero, eu quero apresentar três resultados.
seriam eles:
aba
a a
a a

Alguém pode me ajudar?

4 Respostas

T

Não seriam apenas 2, ou seja, “aba” e “a a”?

wagnerlegiao

Então… veja o seguinte, na string “ac aba a a”
existem três vezes o padrão a.a
o primeiro começa no indice 3, o segundo no indice 5, e o terceiro no indice 7… porem como o segundo resultado (indice 5) já faz parte do resultado anterior, ele acaba ignorando… gostaria de saber como não exclui-lo.

T

Ah, mas se você quer encontrar expressões regulares que se sobrepõem, você não pode usar “find” dessa maneira.

Você tem de passar um parâmetro adicional que indica de onde você tem de reiniciar a procurar:

Matcher.find com parâmetro start

Use os outros métodos de Matcher (dica: veja o método “start”) para determinar como é que você vai achar o caracter de onde você tem de reiniciar sua procura. Acho que você tem de usar “start() + 1”, mas é melhor você testar.

T

Não testei.

public static void main(String... a){
		
		Pattern p = Pattern.compile("(a.a)+");
		String match = "ac aba a a";
		Matcher m = p.matcher(match); 
                int pos = 0;
		boolean b;
		while(b = m.find(pos)){
			System.out.println(match.substring(m.start(),m.end()));
                       pos = m.start() + 1;
		}
	}
Criado 6 de novembro de 2008
Ultima resposta 6 de nov. de 2008
Respostas 4
Participantes 2