Comparar digitos iguais numa string

5 respostas
Rudy

Aloha pessoas!!!

Eu preciso fazer uma classe com um método que retorne verdadeiro caso minha string que recebera numeros tenha 2 ou mais numeros repetidos na mesma sequencia, por exemplo:

string var = “123456”; retornaria falso
string var1=“12343”; retornaria falso
string var2= “12334”; retornaria verdadeiro pois tenho dois 3 repetidos consecutivamente.

Alguém pode me dizer se tem algum jeito de comparar caracter por caracter da mesma string, por exemplo:

“123456” comparar 1 com o 2, o 2 com o 3, o 3 com o 4, o 4 com o 5 e o 5 com o 6.

E se tem algum meio de destinguir letras de numeros numa string, por exemplo:

Se for digitado “12345a” pediaria para digitar novamente, pois tem de ser apenas numeros.

5 Respostas

peczenyj

teste fazer a procura de digitos repetidos com esta expressao regular:

([0-9])\1

provavelmente vc tera que usar \ para representar a \ corretamente

http://www.guj.com.br/java.tutorial.artigo.1.1.guj

Quando a uma string que só tenha numeros, veja se ela bate com esta expressão:

^[0-9]+$

vc também pode usar \d no lugar da lista [0-9] :wink:

Rudy

peczenyj:
teste fazer a procura de digitos repetidos com esta expressao regular:

([0-9])\1

provavelmente vc tera que usar \ para representar a \ corretamente

http://www.guj.com.br/java.tutorial.artigo.1.1.guj

Quando a uma string que só tenha numeros, veja se ela bate com esta expressão:

^[0-9]+$

vc também pode usar \d no lugar da lista [0-9] ;-)

Não entendi direito.

No caso vou receber a string que tem que conter apenas digitos no meu construtor que está assim

public ComparaDigitos(String numero){
		
		digitos = numero;
	}

Quero testar o numero antes da variavel digitos ser carregada, não entendi como usar o ^[0-9]+$

Sou iniciante :smiley:

peczenyj

De uma estudada em expressões regulares ou verifique a string caracter por caracter, numa maquina de estados :wink:

Rudy

Olha minha classe

/**
  *Classe que recebe um numero qualquer e retorna
  *verdadeiro caso esse numero tenho 2 digitos iguais 
  *em sequencia
  *@author Rodolfo Jesus - 1CCPN
  *@version RA: 200813364
  */
    public class ComparaDigitos{
   
      private String digitos;
   
   /**
     *Construtor da classe que vai receber um valor
     *e carregar o campo digitos.
     *@param numeros string - Recebe o valor a ser armazenado
     *em digitos
     */
       public ComparaDigitos(String numero){
      
         digitos = numero;
      }
   /**
     *Método que compara os digitos do campo da classe
     *@return boolean - True se tiver algum digito igual
     *em sequência e false se não tiver.
     */
       public boolean comparaDigitos(){
      
      	int cont = 0;
         String [] digito = digitos.split("");//separa a string
         int [] digitosSeparados = new int [digito.length];//cria um array para armazenar os carateres
         for (int index = 0; index < digito.length; index++){
            digitosSeparados[index] = Integer.parseInt(digito[index]);
         }
         for (int index = 1; index < digitosSeparados.length; index++){
            int index2 = 0;
            if (digitosSeparados[index2] ==  digitosSeparados[index]){
               cont++;
               index2++;
            }
            else{
               index2++;
            }
         }
         if (cont > 0)
      		return true;
      	else
      		return false;
      }
   
   
   }

Compila, mas da erro na linha 33 na hora que executa

ops.rio

falae Rudy,

bom peguei a sua classe de teste e modifiquei, coloquei um método comparando dígito por dígito e outro método comparando por expressão regular.

estude-os

public class Teste {

	public static void main(String[] args){
		Teste t  = new Teste("12344j");
		System.out.println(t.comparaDigitos());
		System.out.println(t.comparaDigitosRegExp());
                t  = new Teste("12344");
		System.out.println(t.comparaDigitos());
		System.out.println(t.comparaDigitosRegExp());
	}
	/** 
	  *Classe que recebe um numero qualquer e retorna 
	  *verdadeiro caso esse numero tenho 2 digitos iguais  
	  *em sequencia 
	  *@author Rodolfo Jesus - 1CCPN 
	  *@version RA: 200813364 
	  */  
	     
	      private String digitos;  
	     
	   /** 
	     *Construtor da classe que vai receber um valor 
	     *e carregar o campo digitos. 
	     *@param numeros string - Recebe o valor a ser armazenado 
	     *em digitos 
	     */  
	       public Teste(String numero){  
	        
	         digitos = numero;  
	      }  
	     //Se existir caracter que nãos seja dígito retornará false
	       public boolean comparaDigitos(){  
	        boolean digitoOk = true;
	    	   
	         for( int i = 0; i< digitos.length(); i++ ){
	        	 
	        	 if( !Character.isDigit(digitos.charAt(i)) ){
	        		 digitoOk = false;
	        	 }
	         }
	         return digitoOk;  
	      }  
	       //Se existir caracter que nãos seja dígito retornará false
	       public boolean comparaDigitosRegExp(){  
		        Pattern p = Pattern.compile("^[0-9]+$");
		        Matcher m = p.matcher(digitos);
		        return m.matches();
		   }  
}
Criado 2 de novembro de 2008
Ultima resposta 3 de nov. de 2008
Respostas 5
Participantes 3