[RESOLVIDO] Verificar asteriscos em uma String - Regex

Ola pessoal,

To com um probleminha aqui e agradeço caso alguem possa ajudar:

Eu preciso verificar se em uma string existem somente asteriscos. Mas como o asterisco é um caracter de escape para regex esta meio complicado. Ja tentei usar barra invertida antes do asterisco mas a IDE informa logo um erro “illegal escape character” e quando eu coloco somente o asterisco o resultado nao é o desejado, ja que ele simplesmente aceita qualquer caracter.

Alguma luz? =D

Desde ja agradeço.

Tenta algo como:

"\*"

Nada…até ja tinha tentado assim. Vou enviar aqui o meu codigo de teste caso alguem se interesse:

public class Teste { public static void main(String args[]){ String teste = "********************************************"; if(teste.matches("\*")){ System.out.print("funcionou\n"); } else{ System.out.print("nao funcionou\n"); } } }

masi tenta usar nomeString.equals("*");

O problema é que eu nao sei qual o numero exato de asteriscos. Dessa forma tem que ser com regex mesmo…usando equals nao funcionou…

Depois de muita tentativa consegui resolver. Fica ai a dica pra alguem que passe pelo mesmo problema:

é soh usar "[] "

=D

[quote=carlos.e.a]Depois de muita tentativa consegui resolver. Fica ai a dica pra alguem que passe pelo mesmo problema:

é soh usar "[] "

=D[/quote]

Realmente RegEx é show ehm!

Veja um esquema bem manual, uma lógica que testei, visando não usar RegEx:

[code]public class Teste {

public static void main(String args[]) {	                                       
	String teste = "*";
	if (teste.contains("*") && new StringUtil().isStringValida(teste)) {
		System.out.print("funcionou\n");
	} else {
		System.out.print("nao funcionou\n");
	}
}

}

class StringUtil{

public boolean isStringValida(String valor){
	boolean flag = false;
	final String caracteresNaoAprovados[] = {
			"a","b","c","d","e","f","g","h","i","j","l","m","n","o","p","q",
			"r","s","t","u","v","x","z","k","w","y","1","2","3","4","5","6",
			"7","8","9","0","/","´",",",".","?","!","'","\"",")","(","&","%",
			"-","+","$","#",
	};
	forMae : for (int i = 0; i < valor.length(); i++) { 
		for (int j = 0; j < caracteresNaoAprovados.length; j++) {
			if (caracteresNaoAprovados[j].equalsIgnoreCase(String.valueOf(valor.charAt(i)))) {
				flag = false;
				break forMae;
			}else{
				flag = true;
			}
		}
	}
	if (flag) {
		return true;
	}else{
		return false;
	}
}

}[/code]

[quote=carlos.e.a]Depois de muita tentativa consegui resolver. Fica ai a dica pra alguem que passe pelo mesmo problema:

é soh usar "[] "

=D[/quote]

Com “[\]”, sua validação é verdadeira em caso de string vazia. Creio que o que você deseja seja “[\]+", onde existe um ou mais asteriscos. "\+” também deveria atender bem.

Fica a dica desse site para testes de expressões regulares em java: http://www.regexplanet.com/simple/index.html

Vishhh!
Tudo isso para testar se uma String tem algum caractere diferente de “*” sem usar regex?

public static boolean isStringValida( String str ) { for ( char c : str.toCharArray() ) if ( c != '*' ) return false; return true; }

[quote=davidbuzatto]Vishhh!
Tudo isso para testar se uma String tem algum caractere diferente de “*” sem usar regex?

public static boolean isStringValida( String str ) { for ( char c : str.toCharArray() ) if ( c != '*' ) return false; return true; }[/quote]

Saquei, nota 10! Não conhecia o método toCharArray();…
Abraço,
AS.

[quote=CintiaDR][quote=carlos.e.a]Depois de muita tentativa consegui resolver. Fica ai a dica pra alguem que passe pelo mesmo problema:

é soh usar "[] "

=D[/quote]

Com “[\]”, sua validação é verdadeira em caso de string vazia. Creio que o que você deseja seja “[\]+", onde existe um ou mais asteriscos. "\+” também deveria atender bem.

Fica a dica desse site para testes de expressões regulares em java: http://www.regexplanet.com/simple/index.html
[/quote]

Halo,

Outra coisa que seu post fez eu lembrar Cintia: Meu codigo tá errado xD. O que eu quero é um numero EXATO de asteriscos, já que eu to querendo validar um arquivo de texto. Ou seja, da forma que eu estou fazendo ele aceita inclusive nenhum asterisco. Entao fica outra duvida - eu sei, ja deu pra perceber que to precisando dar uma estudada em regex, mas por hora espero receber a ajuda de voces =D - Como eu limito a quantidade de caracteres de forma pontual, ou seja, um numero fixo, nem mais nem menos que isso?

Desde já agradeço.

edit: Descobri, xD. E para enriquecer o topico fica ai: é so colocar o intervalo entre {} . Caso seja um valor fixo, coloca-se apenas um valor. Valeu por tudo pessoal. Nao fosse voces meu codigo ia permanecer errado sem contar que me incentivou a dar uma lida a mais sobre regex =D

rs rs rs Obviamente, nesse caso você poderia fazer um “**********”.equals(minhaString) - onde a primeira string tem quantidade certinha de asteriscos. Mas é feio bagarai e acho interessante estudar regex pelas coisas simples.

Isso. Um valor para fixo ou dois valores para intervalo. Boa sorte :wink:

Acredite, sao muitos asteriscos. Nem vale a pena “carregar” o codigo com esse tipo de coisa, que ja esta carregado por natureza xD
No mais, agradeço a todos e vou setar como resolvido =D