Avatar billede soreno Praktikant
07. februar 2003 - 13:24 Der er 9 kommentarer og
1 løsning

RE til at trække tal ud fra streng

Jeg har denne streng:

String test = "+OK Mailbox open, 581 messages";
int numberOfMsg;


Hvordan hiver jeg tallet(581) ud af strengen, med et regulært udtryk, og over i variablen "numberOfMsg" - altså så ligegyldigt hvad tallet er så hives værdien over i variablen ?

Det skal være et regulært udtryk..
Avatar billede soreno Praktikant
07. februar 2003 - 13:48 #1
Det kan åbenbart (næsten) lade sig gøre sådan:
    String line = "+OK Mailbox open, 583 messages";
    Pattern pattern = Pattern.compile("[0-9]");
    Matcher matcher = pattern.matcher(line);
    int i=0;
    while(matcher.find())
    {               
        System.out.println(i + " - " + matcher.group());
        i++;
    }

Output er så:
0 - 5
1 - 8
2 - 3

Men, kan det ikke gøres nemmere ?
Avatar billede arne_v Ekspert
07. februar 2003 - 14:20 #2
Nu er jeg anbsolut ikke regex ekspert, men hvad med:

" [0-9]* "

?
Avatar billede arne_v Ekspert
07. februar 2003 - 14:26 #3
Jeg testede lige - det så ud til at virke !
Avatar billede soreno Praktikant
07. februar 2003 - 14:36 #4
Excelent.
Avatar billede soreno Praktikant
07. februar 2003 - 15:56 #5
Det blev dog lidt bøvlet alligevel da output er:
" 581 "

Altså mellemrum foran og bagefter.

Mem det er vel nok egentlig pattern der ikke er helt optimal.. :-)
Avatar billede arne_v Ekspert
07. februar 2003 - 17:14 #6
Tja.

Du skal jo kunne adskille antal bytes fra antal messages.

PS: " [0-9]+ " er vist bedre end " [0-9]* " !
Avatar billede arne_v Ekspert
07. februar 2003 - 17:18 #7
Hvis formatet ligger nogenlund efast, så burde:

        Pattern pattern = Pattern.compile("[0-9]+");
        Matcher matcher = pattern.matcher(line);
        matcher.find();
        matcher.find();
        System.out.println("#" + matcher.group() + "#");

kunne bruges.

På almindeligt dansk siger det: find det andet tal i linien.
Avatar billede arne_v Ekspert
07. februar 2003 - 17:20 #8
Hov - jeg vrøvler. Jeg læste dit OK (okay) som 0K (nul kilo).
        String line = "+OK Mailbox open, 583 messages";
        Pattern pattern = Pattern.compile("[0-9]+");
        Matcher matcher = pattern.matcher(line);
        matcher.find();
        System.out.println("#" + matcher.group() + "#");
finder det første tal - og det er vel det du skal bruge.
Avatar billede soreno Praktikant
07. februar 2003 - 17:25 #9
Excelent - dét virker.
(Det er POP3 jeg leger lidt med :-)
Avatar billede arne_v Ekspert
07. februar 2003 - 17:38 #10
Det havde jeg gættet.

POP3 er rimelig at arbejde med. IMAP4 er ikke så sjov.
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