Avatar billede Slettet bruger
22. maj 2006 - 16:05 Der er 8 kommentarer og
3 løsninger

Sammenlign et tal fra en string

Hej

Jeg har en string, som ser ud som følgende "2.21" (dog kunne det være et andre tal, men ikke større end 9.99). Jeg skal tjekke dette input, for at sikre mig, at der kun er et tal, så et punktum, så to tal igen.

Jeg har prøvet lidt forskelligt. Med at hente et tegn og lægge den over i en char, men ved ikke hvordan jeg kan sammenligne en char med et tal :-/

Så nogen som kunne hjælpe mig på vej?
Avatar billede bubbaa Nybegynder
22. maj 2006 - 16:21 #1
kan du ikke typecaste det til en double og derefter lave din sammenligning?
Avatar billede Slettet bruger
22. maj 2006 - 16:34 #2
Jo det gjorde jeg før og det er derfor problemet er opstået. Det er noget som jeg modtager fra et RS485 netværk og kan derfor ikke være sikker på at det altid er et tal. Så det kunne godt være x.21 og så får jeg en fejl.

Starter dog med at skrive, at det kun kunne være tal, men det kan også være tegn. Jeg vil gerne tjekke at første karakter er et tal, så et punktum og så to tal. Hvis det ikke er det, så skal den returner fejl
Avatar billede arne_v Ekspert
22. maj 2006 - 16:46 #3
regex
Avatar billede tiller3 Nybegynder
22. maj 2006 - 17:02 #4
Nogle grund til at du ikke bare kan lave noget ala

double number;
try {
  number=double.parseDouble(numberAsString);
}
catch(NumberFormatException ex) {
  // numberString is not a valid double number.
  // Handle error as you want.
  number=-1; // Using -1 to signal error. (Not nice, but)
}
Avatar billede arne_v Ekspert
22. maj 2006 - 17:28 #5
det tester ikke for om det er 1 tal + punktum + 2 tal
Avatar billede _carsten Nybegynder
22. maj 2006 - 17:36 #6
Hvis du vil bruge char, er følgende jo en mulighed

public class Test {
   
    public static void main(String[] args) {
        System.out.println( checkString("2.29"));
        System.out.println( checkString("x.29"));
    }
   
    private static boolean checkString(String s){
            char[] c = s.toCharArray();

            if( !Character.isDigit(c[0]) )
                    return false;

            if( c[1] != '.' )
                return false;
           
            if( !Character.isDigit(c[2]) )
                    return false;

            if( !Character.isDigit(c[3]) )
                    return false;

            return true;
    }
}
Avatar billede _carsten Nybegynder
22. maj 2006 - 17:37 #7
Kræver selvfølgelig at der ALTID er 4 tegn
Avatar billede arne_v Ekspert
22. maj 2006 - 17:57 #8
utestet:

    private static Pattern p = Pattern.compile("^[0-9]\\.[0-9][0-9]$");
    private static boolean match(String s) {
        return p.matcher(s).matches();
    }
Avatar billede Slettet bruger
22. maj 2006 - 20:55 #9
Tak for de mange forslag. Hvis I lige smider et svar, så deler jeg lige point ud
Avatar billede _carsten Nybegynder
22. maj 2006 - 21:08 #10
Svar
Avatar billede arne_v Ekspert
22. maj 2006 - 22:45 #11
svar (og jeg har nu testet at det virker)
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