Dilema de comparação de string

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:

[quote]0
4
1[/quote]

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

é 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.

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

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

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

[quote=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

[/quote]

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

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:

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…

[quote=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…
[/quote]

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

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

(ironia :roll: )

heheheheh

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

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:

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

[quote=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[/quote]

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