Avatar billede touel Nybegynder
20. april 2005 - 15:09 Der er 18 kommentarer og
1 løsning

split funktion

jeg har en streng gemt i et string array. Hvis jeg prøver at splitte værdierne i strengen ved hver komma, tager den ikke den sidste værdi med, fordi der til sidst ikk er nogen komma.
eks:

Streng: 1234,1235,1236,1237

i dette tilfælde printes de første 3 værdier, hvorefter den igen starter med at indlæse strengen og skriver så hele strengen ud.

String [] temparr = sbe.split(",");
System.out.println (temparr.length  + " temparr");
  for (int v = 0; v < temparr.length; v++) 
  {                                     
    System.out.println (temparr [v] + " Seperated 
    values");
Avatar billede arne_v Ekspert
20. april 2005 - 15:26 #1
Jeg mener bestemt at split også tager sidste med
Avatar billede touel Nybegynder
20. april 2005 - 15:27 #2
Det skulle helst være sådan at i den sætning hvor jeg anvender split funktionen at jeg på en eller anden måde kan + 1, så jeg lige får snuppet den sidste værdi med, og dermed slipper for at løbe strengen igennem for anden gang.
Avatar billede touel Nybegynder
20. april 2005 - 15:27 #3
det gør den ikk....
Avatar billede arne_v Ekspert
20. april 2005 - 15:28 #4
public class SplitTest {
    public static void main(String[] args) {
        String s = "a,b,c";
        String[] ss = s.split(",");
        for(int i = 0; i < ss.length; i++) {
            System.out.println(ss[i]);
        }
    }
}

udskriver:

a
b
c
Avatar billede jhertel Nybegynder
20. april 2005 - 15:32 #5
Du siger altså at når sbe="1234,1235,1236,1237", så får du følgende output?

3 temparr
1234 Seperated values
1235 Seperated values
1236 Seperated values

Det er som om der mangler noget af din kode for at kunne forstå hvad du mener. Slutningen af for-løkken er fx ikke med.

Prøv også i programmet at udskrive værdien af sbe. Måske den er noget andet end du regner med?
Avatar billede touel Nybegynder
20. april 2005 - 15:32 #6
sådan ser nogle af værdierne ud hos mig:

21350
21351 Seperated values
21352 Seperated values
21353 Seperated values
21350 Seperated values
21351 Seperated values
21352 Seperated values
21353 Seperated values
21354 Seperated values

som du kan se at efter at de har læst 21353 ind, stopper den og starter forfra igen.
Avatar billede touel Nybegynder
20. april 2005 - 15:37 #7
til jhertel: det er hele if løkken som tager sig af splitningen

if (sbe.indexOf(",")> 0)
{                                   
  String [] temparr = sbe.split(",");                                     
  System.out.println (temparr.length  + " temparr");

  for (int v = 0; v < temparr.length; v++)
  {                                   
    System.out.println (temparr [v] + " Seperated values");
  }       
}

Nogen forslag ?
Avatar billede touel Nybegynder
20. april 2005 - 15:46 #8
jhertel: jeg har printet sbe ud, så du kan se at den begynder at læse strengen igen forfra....

21350
21351, 21352, 21353,21350, 21351, 21352, 21353, 21354 temparr
21350
21351 Seperated values
21352 Seperated values
21353 Seperated values
21350 Seperated values
21351 Seperated values
21352 Seperated values
21353 Seperated values
21354 Seperated values
Avatar billede arne_v Ekspert
20. april 2005 - 18:09 #9
Må vi se hele programmet ?

Jeg tror at vi mangler en brik til puslespillet !
Avatar billede jhertel Nybegynder
21. april 2005 - 10:17 #10
Med hensyn til følgende:

21350
21351, 21352, 21353,21350, 21351, 21352, 21353, 21354 temparr
21350
21351 Seperated values
21352 Seperated values
21353 Seperated values
21350 Seperated values
21351 Seperated values
21352 Seperated values
21353 Seperated values
21354 Seperated values

Kan du så give os præcis den programkode, der udskrev det? Hvad er de to linjer med "21350"?

Denne del ser helt mærkelig ud:

21351, 21352, 21353,21350, 21351, 21352, 21353, 21354 temparr

for ifølge programmet er det, som skal komme før "temparr", jo *længden* af temparr - og hvordan søren kan en længde være "21351, 21352, 21353,21350, 21351, 21352, 21353, 21354"?

Er du sikker på, at det output, du har givet, stammer fra præcis den programkode, du har givet? For så er jeg virkelig rundt på gulvet her.

Hvis sbe er
21351, 21352, 21353,21350, 21351, 21352, 21353, 21354

så bliver den jo læst korrekt nok. Tallene gentager sig jo i sbe, altså 21351-21353, dernæst igen 21351-21353, og så 21354. Det er der da vist ikke noget galt i?
Avatar billede jhertel Nybegynder
21. april 2005 - 10:19 #11
Korrektion: tallene i sbe er 21351-21353, dernæst 21350-21354.

Og det afspejles korrekt i resultatet:

21351 Seperated values
21352 Seperated values
21353 Seperated values
21350 Seperated values
21351 Seperated values
21352 Seperated values
21353 Seperated values
21354 Seperated values
Avatar billede touel Nybegynder
21. april 2005 - 12:06 #12
Her er koden:

if (iCountryCode != -1)
{
StringBuffer lock = new StringBuffer(readExcelExtent.format(values[iCountryCode],1));
lock.append(values [iCountryCode]);
sbe = lock.toString();
                     
if (sbe.indexOf(",")> 0)
{                                   
  temparr = sbe.split(",");
  System.out.println (sbe + " temparr");//konmtrolsætning
  for (int v = 0; v < temparr.length; v++)
  {                                   
    System.out.println (temparr [v] + " Seperated values");//kontrolsætning
  }     
                                     
}                                                         
else   
{
  System.out.println (sbe + ": Landekode");
}
Avatar billede jhertel Nybegynder
21. april 2005 - 12:09 #13
Det ser ganske enkelt ud som om værdien af sbe er "21350\n21351, 21352, 21353,21350, 21351, 21352, 21353, 21354", hvor \n er et newline!

Det passer i hvert fald perfekt med outputtet.

Kan det give mening for dig og løse problemet?
Avatar billede touel Nybegynder
21. april 2005 - 12:12 #14
hehe..jeg har siddet med det her siden i går og kan ikke rigtig komme videre... jeg er åben for forslag

Men jeg er nu mere interesseret i at den ikke skal læse strengen 2 gange og bare skrive værdien : 21350, 21351, 21352, 21353, 21354 ud på en gang....
Avatar billede jhertel Nybegynder
21. april 2005 - 12:16 #15
Men den læser jo netop ikke strengen to gange, kun én gang, som den skal... :o)

Strengen sbe indeholder jo sekvensen "21350, 21351, 21352, 21353, 21354" to gange, bortset fra 21354, som kun er der én gang.

Det er altså ganske enkelt sbe, den er gal med, og ikke opsplitningen af den.

Desuden er der altså et newline i sbe efter første "21350", i stedet for et komma, hvilket også er sært. Men opsplitningen fejler altså ikke noget.
Avatar billede touel Nybegynder
21. april 2005 - 12:24 #16
hmmm... nogen forslag til hvad jeg kan gøre ved sbe, for at den læser en gang strengen ?
Avatar billede jhertel Nybegynder
21. april 2005 - 12:45 #17
Yes.

Først opretter du den jo med values[iCountryCode]:

StringBuffer lock = new StringBuffer(readExcelExtent.format(values[iCountryCode],1));

Dernæst tilføjer du values[iCountryCode] endnu en gang:

lock.append(values [iCountryCode]);

Vælg en af delene :o)
Avatar billede touel Nybegynder
21. april 2005 - 13:02 #18
mange gange tak for hjælpen jhertel... problemet var ganske enkelt et sted som jeg ikke havde regnet med
Avatar billede jhertel Nybegynder
21. april 2005 - 13:08 #19
Glad for at kunne hjælpe, og jeps, lige præcis, problemet var et andet sted. :o) Den slags problemer er ofte de sværeste at løse ;o) - egentlig lidt tankevækkende. Nogle gange er det godt lige at træde et skridt tilbage og se lidt uden omkring problemet, om der skulle ligge noget dér.
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