# String auf Zahlen Überprüfen



## Happymaker (8. September 2004)

Hallo!

hab eine wichtige Frage!

Wie kann ich in Java aus einem JTextField überprüfen ob z.B. 
-nur zahlen eingegeben 
-nur text eingegeben
-richtiges DatumsFormat

Kann mir da jemand einen Tip geben?

Gruß
Happymaker


----------



## Snape (8. September 2004)

Tach,
ich finde es einfacher, von vornherein gewisse Eingaben zu unterbinden. Verwende dazu

jTextField.setDocument(...)

Am besten eine eigene Klasse von PlainDocument ableiten und in der

void insertString(int offset, String str, AttributeSet a)

auf die Eingaben reagieren.


----------



## Happymaker (8. September 2004)

Wie was?
Ich hab leider nichts verstanden!
Sorry!


----------



## Franz Degenhardt (8. September 2004)

Hallo!

Für die Überprüfung eines Strings steht dir seit Java 1.4 "public boolean matches(String regex)" aus der Klasse String in Zusammenhang mit regulären Ausdrücken zur Verfügung. http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#matches
Eine andere Möglichkeit wäre das casten auf einen gewünschten Typ z.B. int und auswerten der Exception für den Fall, dass der cast fehlschlägt (public static int parseInt(String s) throws NumberFormatException).

Um nur gewisse Zeichen zuzulassen beschäftige dich genauer mit Snapes Hinweis.

Grüsse TrueSun


----------



## Thomas Darimont (8. September 2004)

Hallo!

schau mal hier:


```
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class InputChecker extends JFrame {

	private JTextField txtNumbers, txtLetters;

	public InputChecker() {
		super("InputChecker");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		Container c = this.getContentPane();
		c.setLayout(new GridLayout(0, 2));

		c.add(new JLabel("Nur Zahlen: "));
		txtNumbers = new JTextField(10);
		txtNumbers.setInputVerifier(new InputVerifier() {
			public boolean verify(JComponent input) {
				String str = ((JTextField) input).getText();
				if (str == null || str.equals(""))
					return true; //Leere Zeichenfolgen werden auch
								 // aktzeptiert...
				return str.matches("[0-9]*"); //Nur Ziffern 0-9
			}
		});
		c.add(txtNumbers);

		c.add(new JLabel("Nur Buchstaben: "));
		txtLetters = new JTextField(10);
		txtLetters.setInputVerifier(new InputVerifier() {
			public boolean verify(JComponent input) {
				String str = ((JTextField) input).getText();
				if (str == null || str.equals(""))
					return true; //Leere Zeichenfolgen werden auch
								 // aktzeptiert...
				return str.matches("[a-zA-Z]*"); //Nur Buchstaben a-z oder A-Z
			}
		});
		c.add(txtLetters);

		pack();
		setVisible(true);

	}

	public static void main(String[] args) {
		new InputChecker();
	}
}
```

Gruß Tom


----------



## Happymaker (9. September 2004)

Danke das geht wunderbar!
Wie kann ich denn das machen dass z.B. auch ein " / " für die telefonnummer erlaubt ist?
Ich kenne mich mit regulären Ausdrücken nicht aus!
Nochmal danke für deine Antwort!

Gruß
Happymaker


----------



## Slacki (25. Februar 2009)

auch wenns schon ein UUUraltes Thema ist....
ich habe ein ähnliches problem und würde das gern mit einem Cast lösen

ich habe ein JTextfield mit einem KeyEventListener (e)

Wenn der User nun was Tippt möchte ich per Cast prüfen obs ein Int ist.
Wie ich den vorherigen Inhalt des TextFields bekomme weiss ich schon, aber wie
bekomme ich den Aktuellen (also quasi getText()+e.getChar()) ?

lg
Manuel


----------



## zeja (26. Februar 2009)

Mit Casten kannst du natürlich nicht prüfen ob es ein Int ist. Die Eingabe ist ja ein String und kein int. Hast du das Beispiel von Tom mal ausprobiert?


----------



## Slacki (27. Februar 2009)

Das Beispiel von Tom ist mir ehrlich gesagt zu umständlich...

Mit dem Casten kann ich überprüfen obs ein Int ist.
Wenn eine Exception ausgelöst wird wars wohl kein int 

Ist es denn nicht möglich bei einem KeyEvent den Vorher/Nachher Wert
abzufragen ?


----------



## DosCoder (27. Februar 2009)

Hi,
das habe ich dir gestern doch schon mal erklärt:
http://www.tutorials.de/forum/swing...eylistener-e-quelle-bekommen.html#post1735209
Ciao
DosCoder


----------



## jeipack (27. Februar 2009)

zeja hat gesagt.:


> Mit Casten kannst du natürlich nicht prüfen ob es ein Int ist. Die Eingabe ist ja ein String und kein int. Hast du das Beispiel von Tom mal ausprobiert?



Aber sicher!  Mache ich sogar sehr gerne:

```
try {
Integer.valueOf("IchBinKeinInt");
} catch (NumberFormatException e) {
System.out.println("Keine Nummer: "+e.getMessage());
}
```
(Ungetestet, hoffe stimmt so)
Das gibt dan sowas aus wie:
Keine Nummer: For input string: "IchBinKeinInt"

Gruss


----------



## Alvine (27. Februar 2009)

Hey,

zu deinem Telephonnummernproblem:

du bekommst doch einen String der z.B. so aussieht: "0646/1234498".
Am besten du splittest den an '/'.


```
String phonenumber = "0646/1234498";
String [] splitting = phonenumber .split("/");
```
als Ergebnis erhälst du dann:
splitting[0]=0646
splitting[1]=1234498

wenn die Telephonnummer kein '/' enthielt dann enthält splitting nur ein Element
splitting[0]=06461234498

Gruß
Alvine


----------



## zeja (27. Februar 2009)

jeipack hat gesagt.:


> ```
> try {
> Integer.valueOf("IchBinKeinInt");
> } catch (NumberFormatException e) {
> ...



Das hat überhaupt nichts mit casten zu tun. 


```
String s = "1";
int i = (int) s;
```

Das ist casten. Das was du machst ist parsen.

Und nen int kriegt man mit Integer.parseInt. Integer.valueOf gibt nen Integer. Das ist nen Unterschied!


----------

