Avatar billede mickni33 Nybegynder
18. august 2005 - 14:43 Der er 11 kommentarer og
1 løsning

Sortering af streng

Jeg skal have sorteret en streng som kan indeholde tal og bogstaver.

tallene skal have første priotet hvorefter bogstaverne skla komme i alfabetisk rækkefølge.

Hvordan gøres dette?
Avatar billede mickni33 Nybegynder
18. august 2005 - 14:51 #1
kan dette gøres ved hjælp af en af javas egne sorteringsmetoder?
Avatar billede bromer Nybegynder
18. august 2005 - 14:53 #2
Det kan det sikkert godt. Du kan vel storte et chararray som du har lavet udfra din streng?
Avatar billede arne_v Ekspert
18. august 2005 - 14:57 #3
import java.util.Arrays;

public class CharSort {
    public static void main(String[] args) {
        String s = "a2c1b";
        char[] ca = s.toCharArray();
        Arrays.sort(ca);
        String s2 = new String(ca);
        System.out.println(s2);
    }
}

udskriver ihvertfald

12abc
Avatar billede mickni33 Nybegynder
18. august 2005 - 15:57 #4
Avatar billede mickni33 Nybegynder
18. august 2005 - 15:59 #5
Men jeg skal dog bruge feks

12abc
abc
1fck
123

det skal se således ud
123
1fck
12abc
abc
Avatar billede arne_v Ekspert
18. august 2005 - 16:06 #6
er det en normal sortering (som i første stykke kode i linket) ?

bortset fra at jeg ike forstår hvordan 123 komem rfør 1fck men 1fck før 12abc
Avatar billede mickni33 Nybegynder
18. august 2005 - 16:42 #7
hehe nææ blev også selv i tvivl da jeg havde skrevet det:-)
I linket er det den med comparator det er lige den jeg skal bruge
Avatar billede mickni33 Nybegynder
19. august 2005 - 09:06 #8
Hej Arne
Forstår ikke lige den der løkke?
udfører den kun den ene linie -> ix1++?
hvorfor det ?


class CompEx implements Comparator {
    public int compare(Object o1, Object o2) {
        String s1 = (String)o1;
        int ix1 = 0;
        while(ix1 < s1.length() && Character.isDigit(s1.charAt(ix1))) ix1++;
        int i1 = Integer.parseInt(s1.substring(0, ix1));
        String sufs1 = s1.substring(ix1);
        String s2 = (String)o2;
        int ix2 = 0;
        while(ix2 < s2.length() &&Character.isDigit(s1.charAt(ix2))) ix2++;
        int i2 = Integer.parseInt(s2.substring(0, ix2));
        String sufs2 = s1.substring(ix2);
        if(i1 == i2) {
            return sufs1.compareTo(sufs2);
        } else {
            return (i1 - i2);
        }
    }
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

}
Avatar billede arne_v Ekspert
19. august 2005 - 09:36 #9
jeg får ix1 til at pege på det første tegn som ikke er et tal
Avatar billede mickni33 Nybegynder
19. august 2005 - 10:12 #10
aaahh ja ok nu jeg med

husk at lave svar
Avatar billede mickni33 Nybegynder
19. august 2005 - 10:29 #11
hov, der skulle vist lige ændres lidt i while nummer 2... der er det s2.charAt og ikke s1

og også s2.substring nedenunder
Avatar billede arne_v Ekspert
19. august 2005 - 12:49 #12
jep

og svar
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