# String auf zahlenwert prüfen



## Lucaaa (3. Jan 2017)

Hallo!.
ich möchte aus einem Textfeld eine Zahl auslesen. Bis jetzt ist es so, das ich den Textfeldinhalt in einem String gespeichert habe, und der dann in ein Int umgewandelt wird. Das Problem dabei ist aber, dass wenn im Textfeld keine Zahlen stehen, sondern z.B. ein Buchstabe, die Konsole verrückt spielt. Gibt es eine Möglichkeit zu prüfen, ob es eine Zahl ist oder nicht? Oder gibt es spizielle Felder nur für Zahlen?


----------



## Cromewell (3. Jan 2017)

Du musst die Umwandlung in ein Try und Catch packen, dann kannst du die Exception, die dabei geworfen wird, entsprechend behandeln 
Oder du kannst mittels Regex überprüfen, ob es eine Zahl ist.
Gibt bestimmt noch mehr Methoden ^^


----------



## Jardcore (3. Jan 2017)

Welches GUI Framework benutzt du? Swing, JavaFx... ?

In JavaFX gibt es sehr elegante Möglichkeiten das zu realisieren.


----------



## VfL_Freak (3. Jan 2017)

Moin,

dazu bedarf es IMHO nicht speziell JavaFX 

```
if( "123".matches("\\d*") )
{
    System.out.println( "is number" );
}
else
{
    System.out.println( "not a number" );
}
```
oder

```
try
{
    Integer.parseInt( "12a3" );
    System.out.println( "is number" );
}
catch( NumberFormatException ex )
{
    System.out.println( "not a number" );
}
```

oder hier: https://javabeginners.de/String/regular_expressions/Zahlen_erkennen.php
Ist wohl Geschmackssache ...
Gruß Klaus


----------



## JCODA (3. Jan 2017)

VfL_Freak hat gesagt.:


> dazu bedarf es IMHO nicht speziell JavaFX


Diese Methoden sind zwar unabhängig vom Framework, aber sind doch eher "falsch". Dieses Textfield soll ja explizit nur Zahlen annehmen. 
Deshalb ist die Frage nach dem Framework schon wichtig. 
Mit Swing kann man auch etwas mit "Document" hinbiegen, etwa: http://theunixshell.blogspot.de/2014/04/restricting-java-text-field-to-just.html


----------



## Cromewell (3. Jan 2017)

JCODA hat gesagt.:


> aber sind doch eher "falsch"


Auf der Seite, die du geschickt hast, wird genau das gemacht, was Klaus (darf ich das so sagen ? ) und ich beschrieben haben


----------



## VfL_Freak (3. Jan 2017)

Cromewell hat gesagt.:


> darf ich das so sagen ?


klar darfst du 



JCODA hat gesagt.:


> aber sind doch eher "falsch"


was sollte daran falsch sein?? 

Gruß Klaus


----------



## JCODA (3. Jan 2017)

Cromewell hat gesagt.:


> Auf der Seite, die du geschickt hast, wird genau das gemacht, was Klaus (darf ich das so sagen ? ) und ich beschrieben haben


Natürlich, aber eben so gesehen löst ihr ein Problem, welches auftritt. Meine Variante bzw. die im verlinkten Beitrag benutzt ein _Document_. Dort wird das Problem nicht "behandelt" sondern es wird verhindert.


----------



## JCODA (3. Jan 2017)

VfL_Freak hat gesagt.:


> klar darfst du
> 
> 
> was sollte daran falsch sein??
> ...


Natürlich nicht falsch, sondern "falsch"  mit Anführungszeichen. Man sollte doch verhindern, dass man Buchstaben im Textfield eingeben kann, damit das "sauber" aussieht. Eure Lösung ist natürlich richtig, wenn es drum geht ein Teilproblem zu lösen, aber in diesem Kontext reicht es meiner Meinung nicht aus.


----------



## VfL_Freak (3. Jan 2017)

JCODA hat gesagt.:


> Natürlich nicht falsch, sondern "falsch"  mit Anführungszeichen. Man sollte doch verhindern, dass man Buchstaben im Textfield eingeben kann, damit das "sauber" aussieht. Eure Lösung ist natürlich richtig, wenn es drum geht ein Teilproblem zu lösen, aber in diesem Kontext reicht es meiner Meinung nicht aus.


ok, so gesehen hast Du vlt. Recht, aber ob ein Anfänger nicht mit einem _Document_ etwas überfordert ist ???
Dann würde ich noch eher ein _FormattedTextField_ vorschlagen 
http://www.java-forum.org/thema/jtextfield-darf-nur-zahlen-annehmen.83493/

Gruß Klaus


----------



## Lucaaa (3. Jan 2017)

Also das ganze sieht jetzt so aus (Code) aber funktionieren tut es immer noch nicht

```
private  void verschlüsseln() {
   String textinput = textfield.getText();
  String anzahlStellen = textfield3.getText();
     int offset = Integer.parseInt(anzahlStellen);
     
     try
     {
     Integer.parseInt(anzahlStellen);
     if (offset >=1){
    char[] meinArray = textinput.toCharArray();
   char[] meinNeuesArray = verschluesseln(offset%128, meinArray);
   String output = String.valueOf(meinNeuesArray);
   textfield2.setText(output);
   
   }
     }
     catch( NumberFormatException ex )
     {
        textfield.setText("");
        textfield2.setText("");
        textfield3.setText("ERR");
     }
```


----------



## Cromewell (3. Jan 2017)

Das sieht alles noch ein wenig wirr aus 
Du parst "anzahlStellen" vor dem try -Block!
Und dann nochmal drinnen, ohne das du dem geparsten Beachtung schenkst.


----------



## Lucaaa (3. Jan 2017)

Hab jetzt mit einem FormattedTextField gemacht. Jetzt gibt es gleich 2 Probleme.
1. Kann ich die erste Zahl die ich in das Feld schreibe nicht mehr löschen.
2. lässt sich das Textfeld auch nicht mehr leeren. hab schon folgendes versucht.

```
textfield3.setText("");
```
und

```
textfield3.setText(null);
```
Beides ohne Erfolg


----------



## VfL_Freak (4. Jan 2017)

Moin,

poste Deinen aktuellen Code, sonst wird das hier nix  
Hier hat keiner Lust dazu rumzuraten, wie der Code ausschaut und warum er ggf. nicht funktioniert!

Zudem: 





Lucaaa hat gesagt.:


> Beides ohne Erfolg


das ist KEINE Fehlerbeschreibung !!
http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

Gruß Klaus


----------

