Dilema de comparação de string

13 respostas
israelwm

Olha q estranho (pra mim)

String a = "ss"; System.out.println(a.compareToIgnoreCase("ss")); System.out.println(a.compareToIgnoreCase("obavamolahd")); System.out.println(a.compareToIgnoreCase("sss"));

o resultado:

0
4
1

Cara que q é isso? 0 eu presumo que seja quando for igual, joinha pro java, mas e o 4 e o 1???

13 Respostas

J

é uma comparação caractere por caractere, portanto ao fazer

System.out.println(a.compareToIgnoreCase("obavamolahd"));

ele compara primeiramente o ‘s’ com o ‘o’. Já vai dar diferente, então retorna um int com a diferença de posição (no alfabeto) entre os dois caracteres.

J

E na outra comparação ele retorna 1 porque a String “sss” é um caractere maior que “ss”. Note que se você comparasse “ss” com “sss” retornaria -1

vamorim

De acordo com a especificação, compareToIgnoreCase compara lexicograficamente (ordem de dicionário) duas Strings sem considerar se são maiúsculas ou minúsculas e retorna

  • Intero negativo: se a String especificada é menor que a outra
  • Zero: as strings são iguais
  • Inteiro positivo: se a String especificada é maior que a outra
danieldestro

Sempre leia o javadoc: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#compareTo(java.lang.String)

israelwm

vamorim:
De acordo com a especificação, compareToIgnoreCase compara lexicograficamente (ordem de dicionário) duas Strings sem considerar se são maiúsculas ou minúsculas e retorna

  • Intero negativo: se a String especificada é menor que a outra
  • Zero: as strings são iguais
  • Inteiro positivo: se a String especificada é maior que a outra

Grande!!!

saquei a parada, é q eu pensava q sempre retornava -1 quando desse errado, mas melhor ainda, naum sei pra q serve isso mas deve servir pra alguma coisa, mais um ponto pra jaca

vamorim

Acredito que esse valor ajuda a intensificar o quão uma string está lexicograficamente distante de outra. Isso pode inspirar alguns algoritmos de ordenação, por exemplo… :wink:

T

Isso é herança do C++ (note que existe um monte de coisas no Java que funcionam como no C++, mas elas estão em lugares inesperados, não onde você como programador C++ que está aprendendo Java esperaria encontrar. ). Basta ver como é que a função “strcmp” foi definida, e como funciona, e como foi implementada. A definição é tão vaga quanto no Java, e o valor de retorno é exatamente o mesmo que nessa implementação do Java…

israelwm

thingol:
Isso é herança do C++ (note que existe um monte de coisas no Java que funcionam como no C++, mas elas estão em lugares inesperados, não onde você como programador C++ que está aprendendo Java esperaria encontrar. ). Basta ver como é que a função “strcmp” foi definida, e como funciona, e como foi implementada. A definição é tão vaga quanto no Java, e o valor de retorno é exatamente o mesmo que nessa implementação do Java…

é verdade, só naum entendo porque complicaram tanto o java. :p:

vamorim

Complicar? Quem disse que Java é complicado? EJB 2.x são mamão com açucar. Swing então, nem se fala…

(ironia :roll: )

israelwm

heheheheh

bom naum sei se vcs passaram isso qndo começaram a mexer no java do nada, mas eu to me sentindo bem perdido,.

vamorim

Acho que todo mundo passou por isso também.

Existem dúvidas para as quais não existe resposta. Para todas as outras, existe GUJ. :slight_smile:

R

pior ainda doque comecar java do nada, é comecar java vindo duma linguagem procendural…

é muito confuso, mais tenho fe em Deus que irei pegar o jeito !

abracos

israelwm

red neck *:
pior ainda doque comecar java do nada, é comecar java vindo duma linguagem procendural…

é muito confuso, mais tenho fe em Deus que irei pegar o jeito !

abracos

Esse é o maior problema, é bem isso, naum adianta negar, certo vícios das linguagens procedurais ainda nos fazem ter uma recaída hehehe.

Criado 7 de abril de 2005
Ultima resposta 8 de abr. de 2005
Respostas 13
Participantes 6