/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
substring/ if problem
Fra : Jepper


Dato : 24-05-05 18:03

Halløj,
Jeg et problem med at vælge en del af en string. Jeg skal kunne vælge
udfra
om der står GPGGA (noget gps noget) i hele test variablen. (Dette er bare
et
eksempel, der skal senere vælges på det med andre formater)
Jeg kan også sagtens få "GPGGA" gemt i format variablen, men min if vil af
en eller anden årsag ikke vælge rigtigt. Den hopper ned i else lige meget
hvad.

Er der en der lige kan se om jeg har lavet en kæmpe brøler eller noget?

.......
String test = "$GPGGAblablablabla";
String format = test.substring(1, 6);

if (format == "GPGGA")
{
System.out.println("virker:" + format);
}
else
{
System.out.println("virker ikke:" + format);
}
.......


På forhånd tak
Jepper [mac]


--
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 12167 spam-mails.
Betalende brugere får ikke denne besked i deres e-mails.
Hent den gratis her: www.spamfighter.dk



 
 
Michael Legart (24-05-2005)
Kommentar
Fra : Michael Legart


Dato : 24-05-05 18:15

On 2005-05-24, Jepper <jeppermac@-arghspam-gmail.com> wrote:
>
> ......
> String test = "$GPGGAblablablabla";
> String format = test.substring(1, 6);
>
> if (format == "GPGGA")

For at sammenligne strenge skal du bruge equals()

if (format.equals("GPGGA")) {

--
hestdesign.info - we put the hest in .com

Jepper (24-05-2005)
Kommentar
Fra : Jepper


Dato : 24-05-05 19:44

"Michael Legart" <michaelnospam@hest.nu> skrev i en meddelelse
news:slrnd96o7n.o6j.michaelnospam@kamel.legart.dk...
> On 2005-05-24, Jepper <jeppermac@-arghspam-gmail.com> wrote:
>>
>> ......
>> String test = "$GPGGAblablablabla";
>> String format = test.substring(1, 6);
>>
>> if (format == "GPGGA")
>
> For at sammenligne strenge skal du bruge equals()
>
> if (format.equals("GPGGA")) {
>
> --
> hestdesign.info - we put the hest in .com

Der kan man bare se. Jeg troede godt man kunne gøre det sådan.

Jeg siger 1000 tak for hjælpen

Mvh
Jesper


--
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 12170 spam-mails.
Betalende brugere får ikke denne besked i deres e-mails.
Hent den gratis her: www.spamfighter.dk



Henrik Lynggaard (24-05-2005)
Kommentar
Fra : Henrik Lynggaard


Dato : 24-05-05 18:15

Jepper wrote:

> Jeg kan også sagtens få "GPGGA" gemt i format variablen, men min if vil af
> en eller anden årsag ikke vælge rigtigt. Den hopper ned i else lige meget
> hvad.
>
> Er der en der lige kan se om jeg har lavet en kæmpe brøler eller noget?
>
> if (format == "GPGGA")

Du bruger == til sammenligningen, du skal bruge .equals eller
..equalsIgnoreCase. == sammenligner kun om det er den samme memory
adresse der peges på, hvorimod equals sammenligner vædierne.

mvh
henrik

Kasper G. Christense~ (24-05-2005)
Kommentar
Fra : Kasper G. Christense~


Dato : 24-05-05 18:26

> Er der en der lige kan se om jeg har lavet en kæmpe brøler eller noget?

Det har du! En meget klassisk begynder i Java fejl Det korte svar er
at du skal bruge format.equals("GPGGA"), forklaringen følger:

> String format = test.substring(1, 6);
>
> if (format == "GPGGA")

Her tester du hvorvidt *objektreferencen* "format" er lig
*objektreferencen* til et nyt String-objekt med indholdet GPGGA. De 2
referencer er ikke ens, da de refererer til to forskellige objekter. Det
du i virkeligheden ønsker, er at teste om objektet som referencen
"format" peger på, har et bestemt indhold.

Måske lidt lettere at forstå således:

String stringRef1 = "String";
String stringRef2 = "String";

stringRef1 == stringRef2; //false da de peger på hvert sit objekt.
stringRef1.equals(stringRef2); //true da de har samme indhold

stringRef1 = stringRef2; //Bemærk at de nu peger på samme objekt
stringRef1 == stringRef2; //true, da de nu peger på samme objekt
stringRef1.equals(stringRef2); //true da de (naturligvis) har samme indhold

Mvh. Kasper

Johnnie Hougaard Nie~ (24-05-2005)
Kommentar
Fra : Johnnie Hougaard Nie~


Dato : 24-05-05 21:42

Kasper G. Christensen wrote:
> Måske lidt lettere at forstå således:
>
> String stringRef1 = "String";
> String stringRef2 = "String";
>
> stringRef1 == stringRef2; //false da de peger på hvert sit objekt.

Pas på med oversimplificerede utestede eksempler - ovenstående holder
ikke. Sun jdk 1.5 giver true fordi String konstanter automatisk bliver
intern'ed (se String.intern).

Sådan set skulle
if (format.intern() == "GPGGA")
også virke - men jeg vil nu alligevel anbefale at bruge equals.

/Johnnie

Kasper G. Christense~ (25-05-2005)
Kommentar
Fra : Kasper G. Christense~


Dato : 25-05-05 08:50

>> String stringRef1 = "String";
>> String stringRef2 = "String";
>>
>> stringRef1 == stringRef2; //false da de peger på hvert sit objekt.
>
>
> Pas på med oversimplificerede utestede eksempler - ovenstående holder
> ikke. Sun jdk 1.5 giver true fordi String konstanter automatisk bliver
> intern'ed (se String.intern).

Ahh, det var jeg ikke klar over. Så blev jeg også klogere i dag -- tak

I Sun jdk 1.4.2_07 holder det faktisk heller ikke! Spørgerens problem er
altså at ved brug af substring bliver den resulterende streng ikke
automatisk intern'ed? Hvordan kan det egentlig være? Ryger ideen med
automatisk intern'ing så ikke lidt? På sin vis er en String vel altid en
konstant (jeg tænker på at String er imutable)?

Mit eksempel er vel forøvrigt korrekt for andre (almindelige) klasser.

Mvh. Kasper

Thorbjoern Ravn Ande~ (25-05-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 25-05-05 08:56

"Kasper G. Christensen" <news1@kaspershjemmeside.dk> writes:

> automatisk intern'ed? Hvordan kan det egentlig være? Ryger ideen med

Det er sikkert for dyrt.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn/

Johnnie Hougaard Nie~ (25-05-2005)
Kommentar
Fra : Johnnie Hougaard Nie~


Dato : 25-05-05 18:12

Kasper G. Christensen wrote:
> Spørgerens problem er
> altså at ved brug af substring bliver den resulterende streng ikke
> automatisk intern'ed?
Nej, spørgerens problem er den udbredte begynderfejl med at tro at
sammenligninger på objekter sammenligner deres indhold. Automatisk
intern'ing ville ikke være ikke så smart som det ved første tanke lyder.

> Hvordan kan det egentlig være? Ryger ideen med
> automatisk intern'ing så ikke lidt?
Nej, ideen er at spare plads/tid, ikke at sløre nævnte misforståelse.

> På sin vis er en String vel altid en
> konstant (jeg tænker på at String er imutable)?
Ja, og derfor kan Java tillade sig ikke at lade substring lave en
kopi, men referere ind i den char[] som kilde String'en indeholder.
Det sparer plads og er (i modsætning til String.intern) særdeles
hurtigt. På den anden side kan det give bagslag hvis der plukkes små
bidder ud af store mængder data - så kan heap forbruget blive voldsomt.
Her er intern en mulig teknik til at give garbage collectoren noget
at spise.

> Mit eksempel er vel forøvrigt korrekt for andre (almindelige) klasser.
Dit eksempel er korrekt for alle klasser (også String), men ikke for
alle måder at oprette objekter på. F.eks. baserer et pattern som
Flywight sig på genbruge små value objekter i stedet for hver gang at
oprette et nyt som måske har samme indhold som eksisterende.

I øvrigt er følgende normalt false:
new String("a") == new String("a")
fordi String constructor bevidst laver en kopi - ellers ville der ikke
være noget point ved at oprette et String objekt på den måde.

Jeg vil dog fraråde at lave programmering som baserer sig på hvornår
forskellige String objekt referencer bliver ens pga intern og genbrug
ifm substring m.v. - det giver for stor risiko for fejl. Svjh reducerer
brug af forskellige classloader's sikkerheden for at String.intern
giver mulighed for indholdssammenligning med ==.

Med andre ord er det sundt at lade som om dit eksempel generelt er
korrekt!

/Johnnie

Mads Bahrt (26-05-2005)
Kommentar
Fra : Mads Bahrt


Dato : 26-05-05 01:56

Jepper wrote:
> Halløj,
> Jeg et problem med at vælge en del af en string.

Det er muligt at det er overkille til dit problem, men jeg kunne
forestille mig at det kunne løses mere elegant vha. regular expressions.
Det ligger i java.util.regex hvis du får lyst til at kigge på det.

MVH
Mads

Jesper Louis Anderse~ (27-05-2005)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 27-05-05 07:52

Mads Bahrt wrote:

> Det er muligt at det er overkille til dit problem, men jeg kunne
> forestille mig at det kunne løses mere elegant vha. regular expressions.
> Det ligger i java.util.regex hvis du får lyst til at kigge på det.

Det er helt sikkert overkill. Det er muligvis ogsaa en del langsommere.

Jepper (28-05-2005)
Kommentar
Fra : Jepper


Dato : 28-05-05 00:29

"Jesper Louis Andersen" <jlouis@mongers.org> skrev i en meddelelse
news:jmsim2-i26.ln1@miracle.mongers.org...
> Mads Bahrt wrote:
>
>> Det er muligt at det er overkille til dit problem, men jeg kunne
>> forestille mig at det kunne løses mere elegant vha. regular
expressions.
>> Det ligger i java.util.regex hvis du får lyst til at kigge på det.
>
> Det er helt sikkert overkill. Det er muligvis ogsaa en del langsommere.

Det er ikke noget fornemt program jeg skal lave, og jeg har fået løst mit
problem ellers tak for forslaget.

Jepper [mac]


--
Jeg beskyttes af den gratis SPAMfighter til privatbrugere.
Den har indtil videre sparet mig for at få 12340 spam-mails.
Betalende brugere får ikke denne besked i deres e-mails.
Hent den gratis her: www.spamfighter.dk



Søg
Reklame
Statistik
Spørgsmål : 177449
Tips : 31962
Nyheder : 719565
Indlæg : 6408124
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste