Avatar billede kohaar Nybegynder
22. november 2003 - 14:34 Der er 13 kommentarer og
2 løsninger

Sortering af tekststreng

Jeg har et problem. Jeg skal hente en tekststreng ind fra en fil, og så sortere den, så den kan komme i et array. Jeg kan sagtens hente filen ind, og putte dele af strengen ind i et array med substring, men sortering har jeg ingen ide om hvordan man kør.

Min tekststreng ser sådan ud:
14.00 14.00  0.56 1.59  0.08 0.07 0.05  0.09 0.07 0.06  0.10 0.08 0.06  -0.24 -0.07  0.68 0.08 0.24  0.00    161.00 14.00  0.64

Den starter med et mellemrum, og så kommer der variabler jeg skal bruge. De første 2 (14.00 14.00) skal jeg have ind som f.eks. array[0] = 14 array[1] = 14. De næste skal ind som array[2] = 0.56, array[3] = 1.59 osv.

De første 2 tal er kordinater, hvor resten er vinkler osv. Jeg kan sagtens lave strings om til int (med parseInt), så mit problem er bare at få sorteret tekststrengen, så de første tal kommer ud, uden .00 men resten har . med
Avatar billede kohaar Nybegynder
22. november 2003 - 14:36 #1
Ville egentlig have givet 100 point, men kan oprette et spørgsmål med 70 point til den der kan hjælpe mig.
Avatar billede mikkelbm Nybegynder
22. november 2003 - 14:47 #2
Kan du ikke bruge:

Arrays.sort(array);
Avatar billede mikkelbm Nybegynder
22. november 2003 - 14:52 #3
du skal bare huske at:

import java.util.*;
Avatar billede kohaar Nybegynder
22. november 2003 - 15:02 #4
Har lige kigget i java docs, og synes ikke det ser ud til at den kan f.eks. fjerne .00 fra de første 2 entries? Nummeret kan også være f.eks. 456.45, så jeg kan ikke bare bruge substring? Skal jo ikke have sorteret arrayet, men data før de kommer ind i arrayet. Altså fjerne .00 fra de første 2, og derefter sætte resten ind med det hele tal
Avatar billede mikkelbm Nybegynder
22. november 2003 - 15:08 #5
jeg ved ikke om det kan bruges, men hvis du ligger dine værdier ind i en StringBuffer har du mulighed for at redigere i strengen.

StringBuffer har en metode som delete, der kan fjerne noget fra strengen.

stringBuffer.delete(start, end);
Avatar billede kohaar Nybegynder
22. november 2003 - 15:13 #6
Yep. Var en mulighed, men ved ikke hvor starten og slutningen for det jeg skal slette er, når værdien kan være både 14.00 og f.eks. 346.00?
Avatar billede mikkelbm Nybegynder
22. november 2003 - 15:20 #7
prøv følgende:

StringBuffer stringBuffer = new StringBuffer("14.00");
stringBuffer.delete(stringBuffer.lastIndexOf("."), stringBuffer.length());
System.out.println(stringBuffer);

StringBuffer stringBuffer = new StringBuffer("346.00");
stringBuffer.delete(stringBuffer.lastIndexOf("."), stringBuffer.length());
System.out.println(stringBuffer);
Avatar billede arne_v Ekspert
22. november 2003 - 15:26 #8
Måske noget a la:

import java.util.ArrayList;
import java.util.StringTokenizer;

public class SpecialSort {
    public static void main(String[] args) {
        String s = " 14.00 14.00  0.56 1.59  0.08 0.07 0.05  0.09 0.07 0.06  0.10 0.08 0.06  -0.24 -0.07  0.68 0.08 0.24  0.00 161.00 14.00  0.64";
        StringTokenizer st = new StringTokenizer(s, " ");
        ArrayList lst = new ArrayList();
        while(st.hasMoreTokens()) {
            lst.add(st.nextToken());
        }
        String[] sa = new String[lst.size()];
        lst.toArray(sa);
        sa[0] = Integer.toString((int)Double.parseDouble(sa[0]));
        sa[1] = Integer.toString((int)Double.parseDouble(sa[1]));
        for(int i = 0; i < sa.length; i++) {
            System.out.println(sa[i]);
        }
    }
}
Avatar billede kohaar Nybegynder
22. november 2003 - 15:29 #9
Jeg prøver lige det senere i dag. Skal lige have vasket tøj :-) Er ikke særlig god til Java, men begge svar ser meget lovende ud. Hvis i har flere ideer skal i self. bare sende dem...
Avatar billede mikkelbm Nybegynder
22. november 2003 - 16:14 #10
og hvis jeg skulle forsvare min metode:

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        String s = " 14.00 14.00  0.56 1.59  0.08 0.07 0.05  0.09 0.07 0.06  0.10 0.08 0.06  -0.24 -0.07  0.68 0.08 0.24  0.00 161.00 14.00  0.64";
        StringTokenizer st = new StringTokenizer(s, " ");
        ArrayList lst = new ArrayList();
        while(st.hasMoreTokens())
        {
            lst.add(st.nextToken());
        }
        StringBuffer[] sa = new StringBuffer[lst.size()];
       
        for (int i = 0; i<lst.size(); i++)
            sa[i] = new StringBuffer(lst.get(i).toString());
       
        sa[0] = sa[0].delete(sa[0].indexOf("."), sa[0].length());
        sa[1] = sa[1].delete(sa[1].indexOf("."), sa[1].length());
        for(int i = 0; i < sa.length; i++)
        {
            System.out.println(sa[i]);
        }
    }
}

med lidt hjælp fra Arnes kode... :)
Avatar billede kohaar Nybegynder
23. november 2003 - 19:04 #11
Det virkede bare. Skulle lige lave et par ting om, men det var fordi jeg skulle have nogle af tallene ud som double, og andre som int. Var dog ikke så svært. Kan jeg bare oprette et nyt spørgsmål med point? Få får i 50 hver?
Avatar billede arne_v Ekspert
23. november 2003 - 19:24 #12
Jeg mener godt at du kan øge antallet af point uden at oprette et nyt spørgsmål.
Avatar billede arne_v Ekspert
23. november 2003 - 19:25 #13
Men jeg må hellere ligge et svar.
Avatar billede arne_v Ekspert
23. november 2003 - 19:26 #14
Avatar billede kohaar Nybegynder
23. november 2003 - 19:38 #15
Så har jeg oprettet et spørgsmål, med points. Så kan i lige svare under det:

http://www.eksperten.dk/spm/431453
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