Gå til innhold

[LØST] J2ME for loop vs C# for loop


Anbefalte innlegg

Hei

 

Jeg prøver å lage et program i java til mobil som sjekker telefonnummer på gule sider, men får det ikke til å funke i java, men i C# med samme koden så fungerer det utmerket.. Det fungerer også utmerket i vanlig java consoll program.

 

Det som skjer er:

Jeg henter inn html koden fra gule sider query på et telefonnummer og parser det for å finne navn, adresse og telefonnummer. Men entryFound delen av koden blir fyrt av lenge før den skal. I C# blir den fyrt av riktig, og det er samme kode jeg bruker der. Det eneste som er forskjellig er hvordan substring fungerer.

 

Håper noen kan hjelpe. :)

 

Her er java koden:

for (int i = 0; i < lines.length; i++)
           {
               if (entryFound)
               {
                   if (entry == 1)
                   {
                       entryFound = false;
                       contactName = "i: " + i + " - " + lines[i].trim();
                   }

                   entry++;
               }
               else if (addressFound)
               {
                   addressFound = false;
                   contactAddress = "i: " + i + " - " + lines[i].substring(lines[i].indexOf("<p>") + 3, lines[i].indexOf("</p>"));
               }

               if (lines[i].indexOf("/telefonkatalogen/") > -1)
               {
                   entryFound = true;
                   contactPhone = "i: " + i + " - " + lines[i].substring(lines[i].indexOf("?q=") + 3, lines[i].lastIndexOf('"'));
               }
               else if (lines[i].indexOf("address") > -1)
                   addressFound = true;
           }
return "Navn: " + contactName + "\nAdresse: " + contactAddress + "\nTlf: " + contactPhone;

 

Her er C# koden

for (int i = 0; i < lines.Length; i++)
           {
               if (entryFound)
               {
                   if (entry == 1)
                   {
                       entryFound = false;
                       contactName = "i: " + i + " - " + lines[i].Trim();
                   }

                   entry++;
               }
               else if (addressFound)
               {
                   addressFound = false;
                   contactAddress = "i: " + i + " - " + lines[i].Substring(lines[i].IndexOf("<p>") + 3, (lines[i].IndexOf("</p>") - lines[i].IndexOf("<p>") - 3));
               }

               if (lines[i].IndexOf("/telefonkatalogen/") > -1)
               {
                   entryFound = true;
                   contactPhone = "i: " + i + " - " + lines[i].Substring(lines[i].IndexOf("?q=") + 3, (lines[i].LastIndexOf('"') - lines[i].IndexOf("?q=") - 3));
               }
               else if (lines[i].IndexOf("address") > -1)
                   addressFound = true;
           }
Console.WriteLine("Name: " + contactName + "\nAddress: " + contactAddress + "\nPhone: " + contactPhone);

 

Her er hva java gir ut som resultat

Navn: i: 2 -
Adresse:
Tlf: i: 0 - Mitt telefonnummer"title="Mitt navn - Personlig infoside"> 
               Mitt navn
               <span>MER INFO</span>
Og masse mer, faktisk resten av html koden.....

 

Her er hva C# gir ut som resultat

Name: i: 554 - Mitt navn
Address: i: 639 - Min addresse
Phone: i: 552 - Mitt telefonnummer

Endret av miXer
Lenke til kommentar
Videoannonse
Annonse

Skal prøve å bruke XML istenden, men fortsatt så er det noe feil ved J2ME og for looping når dette fungerer flott i vanlig java og C#.

Noen som har merket dette før?

Vil jo gjerne kunne bruke for looping på andre ting selvom det i dette tilfellet er bedre med xml.

Lenke til kommentar

Jeg vil nok helle mot å si at det neppe er løkken som er problemet, men andre deler av koden. Du kan også bruke foreach

Java:

for(String line : lines)
{
 ...
}

C#:

foreach(var line in lines)
{
 ...
}

Utover det, vil jeg si: sjekk om regex kan brukes. IndexOf og SubString tar hundre ganger lenger tid å feilsjekke enn et regex uttrykk.

Lenke til kommentar

Jeg vil nok helle mot å si at det neppe er løkken som er problemet, men andre deler av koden. Du kan også bruke foreach

Java:

for(String line : lines)
{
 ...
}

C#:

foreach(var line in lines)
{
 ...
}

Utover det, vil jeg si: sjekk om regex kan brukes. IndexOf og SubString tar hundre ganger lenger tid å feilsjekke enn et regex uttrykk.

 

foreach er ikke støttet i -source1.3, da må jeg bruke -source 5 eller høyere.

Som sagt i første post har jeg prøvd ut denne koden i vanlig java console program og der fungerer for loop og koden helt utmerket uten at noe er byttet.

Lenke til kommentar

Jeg har funnet ut hva problemet var, og du hadde helt rett GeirGrusom, det var split metoden min som ikke oppførte seg riktig.

 

Jeg hadde satt at den skulle splitte på "\r\n", men den måtte splitte på "\n" isteden.

Lenke til kommentar

Ah, typisk problem. Jeg bruker ofte regex for å dele opp linjer, med "\r\n|\n"

Idiotisk at Windows fortsatt bruker det utrolig arkaiske \r\n opplegget.

edit:

IndexOf og SubString tar hundre ganger lenger tid å feilsjekke enn et regex uttrykk.

 

Obligatorisk link! :)

Hehe, jeg vet ^^

Men regex er ufattelig mye bedre egnet enn IndexOf. Men ettersom miXer skal søke etter tekst fra et konsist dokument som er generert fra en database, og ikke er ute etter å parse HTML, så vil nok regex fungere helt fint.

edit: jeg fant en referanse som er litt mindre psykopat

Note that parsing HTML or XML with regular expressions is painful. Quick-and-dirty patterns will handle common cases, but HTML and XML have special cases that will break the obvious regular expression; by the time you've written a regular expression that handles all of the possible cases, the patterns will be very complicated. Use an HTML or XML parser module for such tasks.

http://www.amk.ca/python/howto/regex/

Endret av GeirGrusom
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...