Comparar String Ex: 80n e 00080n

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

StringUtils pode ajudar… Ve isto.

[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!