Avatar billede jesperbaldur Nybegynder
15. marts 2003 - 17:22 Der er 18 kommentarer og
1 løsning

Tjekke om en streng IKKE er lig en tekststreng

Hvordan tjekkes om strengen navn ikke er lig "jesper"
Hvis jeg skulle tjekke om den er lig med jesper ville jeg bruge
streng.equals("jesper")
Avatar billede magoo20000 Nybegynder
15. marts 2003 - 17:24 #1
if(!streng.equals("Peter");
Avatar billede =maddog= Nybegynder
15. marts 2003 - 17:25 #2
den er så let det burde være gratis. (er bare sur over at komme for sent.... )
Avatar billede magoo20000 Nybegynder
15. marts 2003 - 17:27 #3
*g*
Avatar billede viciodk Praktikant
15. marts 2003 - 17:29 #4
class streng {
  public static void main(String[] args) {
    String streng = "jesper";

    if(streng.equals("jesper")) {
      System.out.println("Strengen er jesper");
    }

    if(!streng.equals("jesper")) {
      System.out.println("Strengen er ikke jesper");
    }
  }
}
Avatar billede magoo20000 Nybegynder
15. marts 2003 - 17:31 #5
Ang. points, så er 30 points efter min mening lige i overkanten, men hvis du mener, at svaret er 30 points være for dig, så er det bare glimrende :-)
Avatar billede viciodk Praktikant
15. marts 2003 - 17:32 #6
Haha, legende let siger du? Dit svar er ikke engang rigtigt :D
Avatar billede magoo20000 Nybegynder
15. marts 2003 - 17:33 #7
Hvad mener du?
Avatar billede =maddog= Nybegynder
15. marts 2003 - 17:33 #8
I øvrigt kan man blive snydt hvis man ikke ved hvor strengen kommer fra!! Bare til almindelig advarsel (der har været to String.equals(String) spørgsmål i rap så jeg synes det er på sin plads).
Prøv at kompiler det her.
public class Exp329094 {
   
    public static void main(String[] args) {
        Object streng1 = makeObj("Brian");
        Object streng2 = makeObj("Brian");
        System.out.println(streng1);
        System.out.println(streng2);
        System.out.println(streng1.equals(streng2));
    }
   
    private static  Object makeObj(final String item)  {
        return new Object() { public String toString() { return item; } };
    }
}
Avatar billede viciodk Praktikant
15. marts 2003 - 17:33 #9
Du mangler en ")" ;o)
Avatar billede =maddog= Nybegynder
15. marts 2003 - 17:34 #10
magoo20000> Du mangler en parantes :D
Avatar billede magoo20000 Nybegynder
15. marts 2003 - 17:37 #11
Ahh.. Det har i helt ret i :-))
Avatar billede arne_v Ekspert
15. marts 2003 - 17:40 #12
maddog>

Hvad er pointen med det eksempel ?

Object's equals er ikke særligt brugbar, men det kan den jo ikke
være for noget så generelt.

Og toString og equals har intet med hinanden at gøre.
Avatar billede =maddog= Nybegynder
15. marts 2003 - 17:44 #13
Eksemplet er faktisk lidt rasmus modsat. Jeg bruger det når jeg skal have to variabler med ellers ens strenge til at blive false. Eksempelvis hvis to JButtons har samme label.
Avatar billede magoo20000 Nybegynder
15. marts 2003 - 17:47 #14
Bare lige til orientering til spørgeren:

Javas == operator brugt på objecter sammenligner kun object-referencer, og giver derfor true i tilfældet
s1 = "test";
s2 = s1;
System.out.println(s1==s2);
men burde således også fejle med
String s1 = "brian";
String s2 = "brian";
System.out.println(s1==s2);
men det gør den ikke.

Forklaringen er den at java vm'en har en særlig string-pulje (af optimeringshensyn). Dette er noget vm'en kan gøre som følge af at String objectet er "imutable" dvs. uforanderligt (dets værdi kan ikke ændres under programkørsel)
Hvis du opretter strenge via konstanter således at de er defineret på kompileringstidspunktet dvs. f.eks.
String s1 = "test";
String s2 = "tester" + " igen";
String s3 = "og "+s2;
så vil den oprette hver entydig streng i strengpuljen netop en gang. Laver du således to ens stenge som :
String s1 = "test";
String s2 = "te"+"st";
så vil der kun blive oprettet 1 streng i puljen, og begge object-referencer peger på denne. Dette vil så give det  - principielt forkerte - svar 'true' ved sammenligning af s1 og s2 med == operatoren.
Endnu en af de hærlige undtagelser der er i java omkring netop String :-)

Jeg håber du er blevet klogere af denne forklaring og at det ikke er alt for rodet og forvirende.

Du kan altså principielt godt sammenligne strenge med == men hvis du vil have den effekt man normalt ønsker, skal du bruge equals istedet. Equals er iøvrigt implementeret specifikt på String til at lave fornuftig sammenligning, hvorimod næsten alle andre objecter nedarver metoden fra object hvor den er implementeret som en simpel == sammenligning.

To sum up:

== sammenligner referencer, og de er ens i dit tilfælde, da du har sat den ene streng lig den anden.
D.v.s. at begge referencer peger på det samme. Hvis du ændrer på på den ene, ændrer du samtidigt den anden.

Når du vil sammeligne indhold af to forskellige strenge SKAL du bruge equals. Det andet virker ikke.

compareTo fortæller om den første streng er <, = eller > den anden.
Avatar billede =maddog= Nybegynder
15. marts 2003 - 17:54 #15
magoo && arne> Vil den ikke lave en String.hashCode == String.hashcode ??
Avatar billede magoo20000 Nybegynder
16. marts 2003 - 17:41 #16
Jesper >> Fik du det til at virke?
Avatar billede arne_v Ekspert
16. marts 2003 - 17:47 #17
maddog>

Nej.

Fra Java API DOC:

----
public boolean equals(Object obj)

Indicates whether some other object is "equal to" this one.

...

The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).

Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.
----

så Object equals er det samme som ==.

og

equals returnerer true betyder at hashCode returnerer samme værdi

men hashCode returnerer samme værdi betyder ikke at equals
returnerer true.
Avatar billede magoo20000 Nybegynder
18. marts 2003 - 20:20 #18
Jesper >> Fik du det til at virke?
Avatar billede jesperbaldur Nybegynder
03. april 2003 - 14:40 #19
Undskyld........Jeg har helt glemt at acceptere..:-(  ja jeg fik det til at virke ved første forsøg
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester