sprawdzenie typu zmiennej

0

proste pytanko:
czy jest jakas funkcja realizujaca sprawdzenie typu zmiennej?? (wprowadzanej np do JTextField'a)
chodzi mi o sprawdzenie znak po znaku czy wszystkie znaki wprowadzone przez uzytkownika sa np typu Int.

Prosze o podpowiedz dla poczatkujacego...(szukalem na forum i nie znalazlem).

0

Z czym konkretnie problem? Robisz pętlę sprawdzającą po kolei czy znak jest liczbą i gotowe. Ewentualnie możesz od razu zastosować funkcję Integer.parseInt(string), która wyrzuca wyjątek jeżeli string nie jest liczbą. Więcej informacji (jak zawsze) w dokumentacji http://java.sun.com/javase/6/docs/api/
Pozdrawiam

0

tzn chodzilo mi o to czy istnieje jakas funkcja do sprawdzania czy np: wartosc danej zmiennej to Integer itp. no nie wiem np: isInt(zmienna) czy cos takiego...
ale jezeli nie ma to powiedzmy ze mam zmienna "zm1" i chce sprawdzic (tak jak napisales) znak po znaku czy jest typu Int. Jak to zrobic?

for (int i=0; i<zm1.getText().length(); i++) {
        ?????????????????           
        }
0

@Afish, metoda z wyjątkiem jest wyjątkowo zła i nie wydajna. Zło tej metody polega na zastosowaniu wyjątków do kontroli przepływu sterowania. Lepiej jest, tak jak piszesz machnać metodę która będzie porównywać znaki w napisie.

@pioroon, użyj zmienna.class dostaniesz obiekt Class reprezentujący klasę obiektu. Reszta w dokumentacji.

0

@pioroon
Chyba najlepiej użyć tej metody:

static boolean isDigit(char ch) 
Determines if the specified character is a digit.
for (int i=0; i<zm1.getText().length(); i++) {
   if(Character.isDigit(zm1.charAt(i))==false){
      //Ten tekst to nie jest liczba
      break;
   }
}

Pisane z palca, więc nie wiem czy działa.
Pozdrawiam

0

a o regexpach sie slyszalo??

mojString.matches("^\\d+$");

http://www.regular-expressions.info/

pozdrawiam

0

@eximus, regexpy szczególnie javowe są potwornie powolne. Lepiej jest już napisać całość w J6 i użyć skryptu perlowego.

0

nie uwierze ze sa wolniejsze niz petla przechodzaca po tablicy znakow powstalej przez toCharArray().
chyba, ze masz jakies testy?
pozdrawiam

0

Metoda czasowa. Nie najlepsza, ale dobrze ukazuje różnicę. Jeden rząd wielkości :)

package net.programmers.forum;

import java.util.Date;

public class RegexpVsPetla {

    public final static String text = "1234568797898799456132456897987a546456489789732131654987896165416849a654s846464874a648797";

    public static void main(String[] args) {
        Date d1 = new Date();
        long s1 = d1.getTime();
        for (int loop = 0; loop < 1000000; loop++) {
            int l = text.length();
            for (int i = 0; i < l; i++) {
                if (!(text.charAt(i) >= '0' && text.charAt(i) <= '9')) {
                    break;
                }
            }
        }
        Date d2 = new Date();
        System.out.println("Pętla: " + (d2.getTime() - s1));

        Date d3 = new Date();
        long s3 = d3.getTime();
        for (int loop = 0; loop < 1000000; loop++) {
            text.matches("^\\d+$");
        }
        Date d4 = new Date();

        System.out.println("Regexp: " + (d4.getTime() - s3));
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0