Galera… to precisando comparar Strings que tem zero antes e sem ter o zero
igual o titulo
80A = 000080A
como faço?
alguem da uma mão ai
Galera… to precisando comparar Strings que tem zero antes e sem ter o zero
igual o titulo
80A = 000080A
como faço?
alguem da uma mão ai
Explicando melhor o meu problema
eu to fazendo um Cadastro de Nota Fiscall
e antes de cadastrar preciso verificar se a nota ja existe no sistema
pode haver dois numeros de nota fiscal iguais… desde que fornecedores sejam diferentes
mas os usuarios podem digitar 00080 e apenas 80… e preciso fazer essa verificação
se o usuario for igual e o numero da nota for igual… não cadastra
e Tem que ser String. por pedido do cliente
Se você tem elas salvas com zeros a esquerda em um tamanho fixo, pega o valor digitado e preenche com zeros também.
Ou usa Regex pra uma coisa mais chatinha.
Isso é uma consulta a banco ?
com um for e usando os métodos da classe String vc consegue criar uma lógica para remover os zeros à esquerda da String
Algoritimo…
[code]String str1 = “80”;
String str2 = “0000080”;
StringBuilder sb = new StringBuilder();
for ( char c : str2.toCharArray() )
if ( c != ‘0’ )
sb.append( c );
str2 = sb.toString();
str1.equals(str2);[/code]
ou
[code]String str1 = “80”;
String str2 = “0000080”;
int i = 0;
for ( char c : str2.toCharArray() ) {
if ( c != ‘0’ ) {
break;
}
i++;
}
str2 = str2.substring( i, str2.length() );
str1.equals(str2);[/code]
você pode usar “LIKE” na sua consulta
SELECT * FROM notafiscal WHERE numero LIKE '%80%'
Isso combina com …00080, 0080, 080, 80, 800, 8000 … etc
[quote=Alberes]você pode usar “LIKE” na sua consulta
SELECT * FROM notafiscal WHERE numero LIKE '%80%'
Isso combina com …00080, 0080, 080, 80, 800, 8000 … etc[/quote]
E combina 456432543254634[color=red]8[/color]00032403240340.
Enfim, não dá certo. E parece que essa validação não é no banco e sim no sistema (pelo que foi explicado).
O stripChars do commons lang faz o serviço (como o amigo acima falou), mas não sei se compensa colocar um .jar no projeto se for usar apenas essa funcionalidade.
[]´s
Acho que fica melhor usando expressões regulares:
System.out.println("000080".replaceFirst("^0+", "").equals("80")); //imprime "true"
Se são números, converta para números e compare:
[code]String str1 = “80n”;
String str2 = “0000080n”;
int nota = Integer.parseInt(str1.replace(“n”, “”));
int nota2 = Integer.parseInt(str2.replace(“n”, “”));
return nota == nota2;[/code]
Agora, você não deveria só salvar o número, de deixar que os zeros sejam ou não colocados através de uma máscara, na hora de exibir a nota? Isso permitiria que você fizesse validações em banco, otimizaria pesquisas, pouparia espaço, etc.
Oi,
A ultima posição sempre é uma letra? (Ex: 00065D, 00097E)
Poderá ter letras sem ser na ultima posição ?
Tchauzin!
Oi,
Novamente pensamos igual Vini =P
Iria pedir para ele transformar em numérico rsrs
Tchauzin!
[quote=Ataxexe]Acho que fica melhor usando expressões regulares:
System.out.println("000080".replaceFirst("^0+", "").equals("80")); //imprime "true"
A melhor solução até agora.
Não basta isso?
System.out.println("000080A".endsWith("80A")); //saida: true
[quote=Bruno Laturner][quote=Ataxexe]Acho que fica melhor usando expressões regulares:
System.out.println("000080".replaceFirst("^0+", "").equals("80")); //imprime "true"
A melhor solução até agora.[/quote]
Oi,
Como o conteúdo é “000080A”.
Para ter a String “000080” provavelmente deveria ser feito um substring(0, tamanho-1).
Caso tenha uma String “000080AGDCG”, como ele iria encontrar a posição correta para dar o substring ?
Deveria ser:
System.out.println("000080A".replaceAll("[^0-9]","").replaceFirst("^0+", "").equals("80"));
Tchauzin!
[quote=lina][quote=Bruno Laturner][quote=Ataxexe]Acho que fica melhor usando expressões regulares:
System.out.println("000080".replaceFirst("^0+", "").equals("80")); //imprime "true"
A melhor solução até agora.[/quote]
Oi,
Como o conteúdo é “000080A”.
Para ter a String “000080” provavelmente deveria ser feito um substring(0, tamanho-1).
Caso tenha uma String “000080AGDCG”, como ele iria encontrar a posição correta para dar o substring ?
Deveria ser:
System.out.println("000080A".replaceAll("[^0-9]","").replaceFirst("^0+", "").equals("80"));
Tchauzin![/quote]
Mas nesse caso não precisa de substring Lina. O regex remove todos os zeros do começo, independentemente das lestras no final. Veja:
public class ComparacaoStrings {
public static boolean isEquivalente(String s1, String s2) {
if (s1.equals(s2)) {
return true;
}
if (s1.length() == s2.length()) {
return false;
}
String maior = s1.length() > s2.length() ? s1 : s2;
String menor;
if (maior == s1) {
menor = s2;
} else {
menor = s1;
}
return maior.replaceFirst("^0+", "").equals(
menor.replaceFirst("^0+", ""));
}
public static void main(String[] args) {
System.out.println(isEquivalente("000080A", "80A")); // true
System.out.println(isEquivalente("000080AGDCG", "80AGDCG")); // true
System.out.println(isEquivalente("000123", "000321")); // false
System.out.println(isEquivalente("00000000000123", "0000123")); // true
}
}
Oi,
Sim! isso eu sei…
estava me ferindo ao exemplo.:
System.out.println("000080".replaceFirst("^0+", "").equals("80")); //imprime "true"
Caso, fosse feito a comparação:
System.out.println("000080A".replaceFirst("^0+", "").equals("80")); //imprime "false"
Iria dar problema…
Por isso coloquei:
System.out.println("000080A".replaceAll("[^0-9]","").replaceFirst("^0+", "").equals("80"));
Tchauzin!
[quote=lina]
Como o conteúdo é “000080A”.
Para ter a String “000080” provavelmente deveria ser feito um substring(0, tamanho-1).
Caso tenha uma String “000080AGDCG”, como ele iria encontrar a posição correta para dar o substring ?[/quote]
Pois é lina, mas não lembro de ele ter dito que queria comparar somente a parte decimal. O número dele pode ser um ABCDEF. Não necessariamente é de base 10.
Bem, também não sei, temos que perguntar ao autor do tópico.
Eu ainda acho que se o número é relevante, ele não deveria estar sequer guardando ou manipulando o dado com o String…
[quote=ViniGodoy]Se são números, converta para números e compare:
[code]String str1 = “80n”;
String str2 = “0000080n”;
int nota = Integer.parseInt(str1.replace(“n”, “”));
int nota2 = Integer.parseInt(str2.replace(“n”, “”));
return nota == nota2;[/code]
Agora, você não deveria só salvar o número, de deixar que os zeros sejam ou não colocados através de uma máscara, na hora de exibir a nota? Isso permitiria que você fizesse validações em banco, otimizaria pesquisas, pouparia espaço, etc.[/quote]
Oi,
Apenas melhorando:
[code]String str1 = “80n”;
String str2 = “0000080n”;
int nota = Integer.parseInt(str1.replaceAll("[^0-9]",""));
int nota2 = Integer.parseInt(str2.replaceAll("[^0-9]",""));
return nota == nota2;[/code]
Tchauzin!