Boa noite companheiros… preciso de uma ajuda aqui, porque pra variar estou empacado :x
Bom preciso validar se as aspas simples estão todas fechadas corretamente em um String. Até ae tudo bem, o problema surge quando eu tenho caracterer de scape /… Exemplos de validações…
acho que deu para entender… estou empacando quando uma aspa é escapada, pois quando eu faço uma String com esse tipo de conteúdo e vou validar com o seguinte método:
private boolean verifyQuotes(String text) {
int check = 0;
char[] characters = text.toCharArray();
for (int i = 0, n = characters.length; i < n; i++) {
//primeiro verifica se eh uma aspas
if (characters[i] == '\'') {
//se for aspas verifica se ele nao estah escapando a aspas com uma barra
if (characters[i-1] != '\\') {
++check;
} else {
System.out.println("tem uma barra");
}
}
}
//soh vai ser verdade se tiver um par...
return ((check%2) != 0);
}
Só que ele simplesmente não vem mais com a barra que foi usada no scape… e agora? alguma dica de como eu faço esse tipo de validação?
Não faz dessa forma não, usa Regex, você tem muito mais opções e muito menos código.
Dá uma pesquisada sobre, e se houver alguma dificuldade na montagem da expressão de busca, posta aqui de novo.
Regex no meu caso não sei se daria certo, acho que vcs não compreenderam meu problema:
preciso validar se as aspas estão fechadas, mas não quer dizer que o texto começa com aspas por exemplo:
meu nome é ‘anderson’ => válido
‘anderson’ é meu nome => válido
isso ‘ande’rson’ é meu nome => válido
esse nome, ‘ande’rson’ => inválido
Regex não serveria, na minha opinião, pois ele não consegue contar e sim somente valida a expressão. Este caso é parecido com valdiar se os parenteses estão fechados corretamente, só com a diferença que eles não são escapados… vc valida isso com expressões regulares? não! pois regex não é capaz de contar…
No meu problema, quando eu guardo o conteúdo para ser validado em um String, as barras que foram usadas para o scape simplesmente somem. Não tem uma forma de guardar a String crua, sem que isso ocorra?
Dá pra fazer com Regex sim, mas a expressão ficaria um pouco grande. E pelo jeito você não pesquisou nada, porque se tivesse pesquisado, tinha achado alguma coisa também sobre tokenização.
Tokenizando, usando o método Splt() do String ou a Classe Scanner, você conse ter o numero de aspas em uma expressão.
[quote=Jaba]Dá pra fazer com Regex sim, mas a expressão ficaria um pouco grande. E pelo jeito você não pesquisou nada, porque se tivesse pesquisado, tinha achado alguma coisa também sobre tokenização.
Tokenizando, usando o método Splt() do String ou a Classe Scanner, você conse ter o numero de aspas em uma expressão.[/quote]
Jaba, eu pesquisei sim, sou muito fã de expressões regulares e tenho bastante referencia, não diga algo que vc não saiba. No meu caso saber o número de aspas em uma expressao não resolve… olha:
String teste = “‘ander’son’”;
o teste, vai vir para mim desse jeito => ‘ander’son’… note que se eu tivesse gravado as aspas sem o scape, estaria errado, mas com o scape a string tah vindo sem a barra, se eu for contar o número de aspas não vai funcionar nunca. Percebeu?
eu só não consigo mesmo ver uma solução utilizando expressões regulares, pois se tivesse visto uma prévia solução já a teria adotado e não teria reportado o erro! Caso vc tenha conhecimento de que realmente funcionaria com ER, oka… por favor poste o código (isso não é provocação, apenas curiosidade para ganho de conhecimento).
Obrigado pela atenção
Claro que dá pra fazer tokenização, e eu não estou falando do que eu não sei. Porque, poxa, se voce tem mesmo bastante referência, porque reinventar a roda com esse método que você postou?
Esse negócio do Slash(barra) não dá pra evitar, você vai ter que dar o replace para duas barras, porque a JVM reconhece \qualquercoisa como sinal de escape.
[quote=Jaba]Claro que dá pra fazer tokenização, e eu não estou falando do que eu não sei. Porque, poxa, se voce tem mesmo bastante referência, porque reinventar a roda com esse método que você postou?
Esse negócio do Slash(barra) não dá pra evitar, você vai ter que dar o replace para duas barras, porque a JVM reconhece \qualquercoisa como sinal de escape.[/quote]