Unconvertible types für Tastatureingabe?

  • Themenstarter Themenstarter thorr
  • Beginndatum Beginndatum
T

thorr

Gast
Hi,

ich möchte das auf der Tastatur eingegebene Zeichen mithilfe regulärer Ausdrücke auf die Art überprüfen, d.h., ob eine Zahl vorliegt oder eine Zeichenkette. Allerdings benötige ich dazu eine CharSequence, da matcher() diese erwartet, eine Konvertierung ist jedoch nicht möglich und bricht mit der Fehlermeldung "unconvertible types" ab.

Java:
Pattern pattern = Pattern.compile("[0-9]+");
        
Matcher matcher = pattern.matcher((CharSequence)keyboard.zeichen());
boolean zeichen_isdigit = matcher.matches();

Ich bin mir sicher, dass ich einen ziemlich blöden Fehler begehe, aber ich bin Anfänger in Java und habe keine Ahnung, was ich hier an dieser Stelle falsch mache. Ich hoffe, ihr könnt mir helfen.

LG
 
Danke für deine Antwort.

Arrg, ich hab vergessen, zu erwähnen, dass ich SuM verwende. Dabei gibt zeichen() das unterste Zeichen (bzw. das "älteste") des Tastaturpuffers aus.
 
klappt das?

Java:
Pattern pattern = Pattern.compile("[0-9]+");
String s = ""+keyboard.zeichen();
System.out.println("--> " + s);
Matcher matcher = pattern.matcher(s);
boolean zeichen_isdigit = matcher.matches();

eventuell noch vorher zum debuggen den String ausgeben
 
in Java nutzt man eher camelCase:
also nicht
Java:
boolean zeichen_isdigit = matcher.matches();
sondern
Java:
boolean zeichenIsDigit = matcher.matches();

edit
und vllt bei einer Sprache bleiben^^:
Java:
boolean tokenIsDigit = matcher.matches();

MFG

Tomate_Salat
 
Ah, da sieht man, wovon JavaScript abstammt - danke für den Tipp. Ich komme eigentlich von PHP bzw. C und lerne Java jetzt schulbedingt.

und vllt bei einer Sprache bleiben^^:
Java:
boolean tokenIsDigit = matcher.matches();
Naja, dann ja eher char - allerdings verwende ich zeichen, da dies auch die SuM-Bibliothek tut. Gefällt mir zwar auch nicht, dieses Deutsch-Englisch-Mischmasch, aber man muss es nunmal so annehmen und wenn man da nach Prinzipien vorgeht, dann klappt das auch einigermaßen.

Übrigens: Müsste es nicht eigentlich "unconvertable" heißen, oder hab ich im Englischunterricht nicht richtig aufgepasst? ???:L
 
Zuletzt bearbeitet:
Himmelherrgottnochmal, was mache ich denn hier wieder falsch?!
Java:
if (enteredDigits != 0)
{
    pen.setzeFarbe(enteredDigits);
    for (int i = 0; i < enteredDigits.length; i++)
    {
        keyboard.weiter();
    }
}
int könne nicht dereferenced werden - abgesehen davon, dass ich mir in meinem Zusammenhang die Bedeutung dieser Meldung nicht wirklich erschließen kann, habe ich keine Ahnung, was ich falsch mache und konnte dazu auch nichts bei Google finden. Ich habe mehrmals meinen Quellcode überprüft, ob ich i nicht vielleicht schon einmal deklariert habe o.ä., aber das habe ich definitiv nicht.
 
enteredDigits ist ein Integer. Ich glaube, ich kann meinen Fehler auch schon erahnen - .length ist nicht auf Zahlen, sondern lediglich auf Strings anwendbar, oder? Mit PHP ist alles so viel einfacher... 😛ueh:

Wie kann ich die Zahl denn dennoch auf die Anzahl an Stellen hin überprüfen? Gibt es eine andere Lösung als mit Zehnerpotenzen zu vergleichen?
 
.length auf arrays
.length() auf strings

Du könntest aus enteredDigits ein String machen und dessen Länge abfragen:
Java:
for (int i = 0; i < (enteredDigits+"").length(); i++)
 
.length auf arrays
.length() auf strings

Du könntest aus enteredDigits ein String machen und dessen Länge abfragen:
Java:
for (int i = 0; i < (enteredDigits+"").length(); i++)

Java:
+""
ist nich dazu da sachn zu Strings zu machn 😵

Java:
for (int i = 0; i < enteredDigits.toString().length(); i++)
 
Java:
int a = 1;
String s = Integer.valueOf(a).toString();


ist übrigends genau das was nachher auch passiert, nur das er noch zusätzlich ein leeres String object dazu erzeugt und sie in ein drittes verbindet. Performance ist was anderes.
 
Zuletzt bearbeitet von einem Moderator:
Oha, ich wollte hier jetzt keinen Streit über eine korrekte Lösung auslösen. 😀 Ich bin eigentlich immer für die korrekte Variante, also in diesem Fall wohl die mit "String.valueOf(digit)" (die anderen sind natürlich auch korrekt, aber ich vermute mal, dass dies die ist, die in meinem Fall funktionieren wird, denn enteredDigits ist hier kein Objekt."

ja wenn man nicht weiß was man tut. PHP verzeiht einfach viel.
Ja, PHP ist da sehr tolerant. Aber genau das macht die Sache meiner Meinung nach auch einfacher - als Gegenteil von aufwändig. Ich habe in PHP ja die Möglichkeit, z.B. mittels des ===-Operators genauer zu werden, aber es ist nunmal oft so, dass man Daten als falsche Typen erhält, wie z.B. Ziffern aus einem Formular als Strings oder eben hier die eingegebene Ziffer. Da finde ich alle Lösungsansätze sehr aufwändig für das, was man im Endeffekt bekommt, und es geht auf die Performance.
Dafür hat java den Vorteil, dass wenn man weiß was man tut, viel einfacher Fehler behben kann als in PHP.
Sehe ich bisher nicht so, aber das kann ja noch kommen. In PHP konnte ich meine (Denk-)Fehler bisher immer beheben, ohne dass mich gestört hätte, dass PHP da mehr durchgehen lässt - mit einem vardump() ist sowas schnell geklärt. Ich empfinde hier Java einfach als zu pingelig.

BTW: Das war übrigens der falsche Smiley - es sollte eher ein Getrübter sein, hatte mir die Animation nicht bis zum Schluss angesehen. 😉
 

Neue Themen


Zurück
Oben