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