comparação de string com modelo

olá!

procurei isto no google e no guj e não encontrei

quero saber se existe uma função que compare uma string com um modelo de formatação ou se eu tenho que fazer uma :stuck_out_tongue:


  // declarando a minha função fictícia
  boolean  compareStringToModel( String string, String model )
  {
    // se é que ela não já existe
   }

public static void main (String[] args)
{
   String Texto = "123teste abc";

   if( compareStringToModel(Texto,"%d%s abc") == true)
         System.out.println ("É Verdade");
}

bem… no caso a saída disso é

É Verdade.


Alguém conhece?

Agradeço desde já…

Utiliza expressao regular, ela serve para isto

http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html
http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html

Surgindo duvidas, so postar o código.

Att

leogasamo, uma das possíveis formas de implementar o que você deseja é utilizar Regular Expressions (regex).

Um exemplo:

import java.util.regex.*;

public class TestingRegex {
	public static void main(String[] args) {
		
		String texto = "123teste abc";
		
		Pattern p = Pattern.compile("(\d)+([a-zA-Z])+ abc");
		Matcher m = p.matcher(texto);
		
		if (m.find()){
			System.out.println("É true: " + m.group());
		}
		
		
	}
}

Explicando o código, a classe Pattern recebe no método compile() a expressão regular que você deseja procurar numa determinada String, por exemplo.
Então ali no caso, ele quer encontrar os casos em que há 1 ou mais dígitos("(\d)+"), seguidos por 1 ou mais caracteres entre A e Z("([a-zA-Z])+"), e que termine assim: " abc".
Enfim, depois ele utiliza a instância de Pattern criada para gerar um Matcher, e passando a String em que você deseja procurar tal expressão.

Então, isso foi só pra você ter uma idéia. Não sei as características do seu caso.
Aconselho você a dar uma pesquisada sobre regex e ver se encaixa com o que você quer.

O pessoal pode ter outras idéias melhores também.
Espero ter ajudado,
flws…

Ajudaram bastante
muito obrigado

eu achei o seguinte na biblioteca de classes:

"A typical invocation sequence is thus

 Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

A matches method is defined by this class as a convenience for when a regular expression is used just once. This method compiles an expression and matches an input sequence against it in a single invocation. The statement

 boolean b = Pattern.matches("a*b", "aaaaab");

is equivalent to the three statements above, though for repeated matches it is less efficient since it does not allow the compiled pattern to be reused. "

copiando o código do meu programa, eu fiz desse jeito:


String cmd = ScanV2.proxLinha();
//ScanV2 é uma classe que eu criei.. enfim ela retorna uma string

if	(Pattern.matches("[g][e][t][(](\d)+[,](\d)+[)]",cmd))
{
      //faz um determinado comando se cmd for igual a "get(c,r)"
      //onde "c" e "r" são um conjunto de qualquer tamanho de dígitos entre 0 e 9
}

      // funciona muito bem =D

só usei isso

[abc] : procura um caracter, e apenas um, que seja ‘a’,‘b’ ou ‘c’
(\d) : procura um dígito entre 0 e 9
(\d)+ : procura um ou mais dígitos entre 0 e 9

obrigado mais uma vez =]

Cara, acho que não tem necessidade (apesar de não ficar errado também) de colocar colchetes nas primeiras letras.
Tipo “[g][e][t](+,+[)]” poderia ficar “get\((\d)+,+\)”

Posso estar completamente errado, mas creio que assim fica mais claro :smiley:

de fato
:stuck_out_tongue: