Foros del Web » Programación para mayores de 30 ;) » Java »

StringTokenizer para validar clave en JAVA

Estas en el tema de StringTokenizer para validar clave en JAVA en el foro de Java en Foros del Web. Holas, tengo un problema con la validacion de una clave. Hice una pantalla en la cual debo ingresar una clave. Es una pantalla como la ...
  #1 (permalink)  
Antiguo 06/05/2006, 16:22
Avatar de Estef  
Fecha de Ingreso: febrero-2006
Mensajes: 12
Antigüedad: 18 años, 2 meses
Puntos: 0
StringTokenizer para validar clave en JAVA

Holas, tengo un problema con la validacion de una clave. Hice una pantalla en la cual debo ingresar una clave. Es una pantalla como la de los bancos en donde se digita la cedula y se debe digitar la clave. Ya tengo la pantalla hecha pero no se como hacer la validacion de la clave. Esta tiene que se xxx-xxx-xxx, en donde los tres primeros terminos deben ser todos numeros mayores que 5, el segundo bloque de xxx debe tener numeros menores que 5 pero no negativos y el tercer bloque debe tener numeros iguales. COmo hago eso? ademas debe salir xxx-xxx-xxx es decir con el tocken "-". Entonces hay que hacer una clase clave en la que este todo eso y no se como hacer por fa ayuda
  #2 (permalink)  
Antiguo 07/05/2006, 14:36
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 10 meses
Puntos: 24
que es loq ue tiene que hacer la clase?
validar una cadena tipo "xxx-xxx-xxx"?
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #3 (permalink)  
Antiguo 07/05/2006, 14:40
Avatar de Estef  
Fecha de Ingreso: febrero-2006
Mensajes: 12
Antigüedad: 18 años, 2 meses
Puntos: 0
Si validar xxx-xxx-xxx

Es decir que en la clase se debe ingresar por ejemplo una clave 123-456-789. Es decir ingreso esa clave con esa separacion y cada uno de esos bloques debe validar. por ejmplo si ingreso una clave 123-689-521 me tiene que salir quie esta mal ingresada porque el primer bloque \debe tener numeros mayores que 5, el segundo bloque menores que cinco y el tercer bloq todos los numeros deben ser iguales. Por fa si me puedes ayudar te agradezco mucho,
  #4 (permalink)  
Antiguo 07/05/2006, 15:46
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 10 meses
Puntos: 24
Me gusto el porblema que planteaste y lo resolvi mas o menos

Cualquier duda, pregunte

Código:
public class test {
	public static void main(String [] args) {
		Clave key = new Clave("666","444","111");
		if(key.validarClave())
			System.out.println("Es correcto");
		else
			System.out.println("Es incorrecto");
	}
}

public class Clave {
	
	String subKey1;
	String subKey2;
	String subKey3;
	
	public Clave(String subClave1, String subClave2, String subClave3){
		subKey1 = subClave1;
		subKey2 = subClave2;
		subKey3 = subClave3;
	}
	
	public boolean validarClave(){
		if (validarSubStr1() && validarSubStr2() && validarSubStr3())
			return true;
		else
			return false;
	}
	
	private boolean validarSubStr1() {
		boolean ret = true;
		for (int i=0;i<subKey1.length();i++)
			if(Integer.parseInt(subKey1.substring(i,i+1))<=5)
				ret = false;
		if(subKey1.length()== 3 && ret)
			return true;
		else
			return false;
	}

	private boolean validarSubStr2() {
		boolean ret = true;
		for (int i=0;i<subKey2.length();i++)
			if(Integer.parseInt(subKey2.substring(i,i+1))>=5)
				ret = false;
		if(subKey2.length()== 3 && ret)
			return true;
		else
			return false;
	}

	private boolean validarSubStr3() {
		boolean ret = true;
		for(int i=0;i<subKey3.length()-1;i++)
			if(subKey3.toCharArray()[i]!=subKey3.toCharArray()[i+1])
				ret = false;
		if(subKey3.length()== 3 && ret)
			return true;
		else
			return false;
	}
	
}
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #5 (permalink)  
Antiguo 07/05/2006, 15:48
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 10 meses
Puntos: 24
Para usar esta clase, llamas al constructor de Clave, a la cual le tenes que pasar las 3 secuencas de caracters (las xxx).
Despues llamas al metodo validarClave() y esta te dice si es correcta o no.

Tene en cuenta que si ingresas letras en ves de nuemros, cuando valides se largara una excepcion.

Saludos
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #6 (permalink)  
Antiguo 07/05/2006, 18:24
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Y por qué no usaste el StringTokenizer? Te habría hecho la vida mucho más feliz.

La versión de TolaWare funciona, aquí tienes otro algoritmo:

Código:
import java.util.StringTokenizer;
import java.util.regex.Pattern;

public class Clave {

	public static boolean validarClave(String clave) {
		if (!((Pattern.compile("[0-9]{3}-[0-9]{3}-[0-9]{3}")).matcher(clave))
				.matches())
			return false;

		StringTokenizer tokens = new StringTokenizer(clave, "-");

		String trio = tokens.nextToken();
		for (int i = 0; i < 3; i++)
			if (Integer.parseInt(new Character(trio.charAt(i)).toString()) < 5)
				return false;
		trio = tokens.nextToken();
		for (int i = 0; i < 3; i++)
			if (Integer.parseInt(new Character(trio.charAt(i)).toString()) >= 5)
				return false;
		trio = tokens.nextToken();
		char primervalor = trio.charAt(0);
		for (int i = 1; i < 3; i++)
			if (trio.charAt(i) != primervalor)
				return false;
		return true;
	}

	public static void main(String[] args) {
		System.out.println(Clave.validarClave("585-123-777"));
	}
        // esto retorna true si está bien escrita, según tus requerimientos,
        // y false si está mal escrita.
}
__________________
El último TipdaR

Última edición por Tipdar; 07/05/2006 a las 19:39
  #7 (permalink)  
Antiguo 27/05/2006, 18:46
Avatar de Estef  
Fecha de Ingreso: febrero-2006
Mensajes: 12
Antigüedad: 18 años, 2 meses
Puntos: 0
Muchas gracias por sus ayudas. Ya lo probe y si funciono gracias gracias
  #8 (permalink)  
Antiguo 05/06/2006, 12:07
 
Fecha de Ingreso: junio-2006
Mensajes: 1
Antigüedad: 17 años, 11 meses
Puntos: 0
Para validar una cadena podes usar un automata finito reconocedor de ese lenguaje..
  #9 (permalink)  
Antiguo 05/06/2006, 18:56
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Aunque el hilo es un poco antiguo, creo que sólo con una expresión regular hubiera bastado:
Código:
public boolean validarClave(String clave) 
{
    return ((java.util.regex.Pattern.compile("[5-9]{3}-[0-5]{3}-([0-9])\\1\\1")).matcher(clave)).matches();
}
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #10 (permalink)  
Antiguo 06/06/2006, 04:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Muy interesante el uso de la "Back Reference" para controlar la repetición.
  #11 (permalink)  
Antiguo 25/04/2008, 10:48
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Sonrisa Re: StringTokenizer para validar clave en JAVA

hola
necesito que me ayude alguien a partir una cadena por ejemplo cuando aplico cadena.readline en el caso de un fichero llega como un string y necesito guardarlo en un arreglo de subcadenas teniendo en cuenta \" como un elemento mas de la cadena partiendo en subcadenas cada vez que encuentre minimo un espacio en blanco.
ej para la sgte cadena:" hola que mas"hola que\"mas hola" que mas"
el arrglo debe quedar:
arrcad={hola, que, mas"hola que\"mas hola", que, mas}
gracias
  #12 (permalink)  
Antiguo 25/04/2008, 10:50
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Re: StringTokenizer para validar clave en JAVA

hay alguien que me responda?
  #13 (permalink)  
Antiguo 25/04/2008, 19:38
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 10 meses
Puntos: 24
Re: StringTokenizer para validar clave en JAVA

Para que te contesten a tu duda, tenés que crear un hilo nuevo con tu consulta, no usar hilos anteriores.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 19:05.