quero saber se existe uma função que compare uma string com um modelo de formatação ou se eu tenho que fazer uma
// 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");
}
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…
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
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