WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 25.11.2004, 13:35   #1
dietz
Senior Member
 
Registriert seit: 19.04.2001
Alter: 50
Beiträge: 165


Standard Problem mit Javaprogramm und Unicode

Hallo,
ich komme da nicht weiter.
Ich habe ein Javaprogramm das mir prüft ob die Eingabe des Users ein Buchstabe ist usw.
Also der User gibt in der commandshell einen Buchstaben ein und eine funktion prüft obs ein Buchstabe ist, wenn ja gibt/soll sie True zurückgeben.

static boolean isLetter (char ch){
return (ch == '\u00C4');
}

00c4 ist der hexwert von Ä in unicode.
Gebe ich jetzt aber im Programm ein Ä ein liefert mir die Funktion nicht TRUE.
Mit anderen Zeichen wie { oder ~ funktionierts nicht aber mit den Umlauten (Latin-1 Supplement).
Hat von Euch einer eine Idee warum gerade bei den Umlauten?
Danke!
dietz ist offline   Mit Zitat antworten
Alt 25.11.2004, 14:49   #2
thyrver
Veteran
 
Registriert seit: 30.11.2001
Alter: 44
Beiträge: 290


thyrver eine Nachricht über ICQ schicken thyrver eine Nachricht über AIM schicken
Standard

also
Code:
 return (ch == '\u00C4');
soll 1 zurückliefern, wenn ch dem character von '\u00C4' entspricht. warum geht das nicht einfach mit
Code:
 return (ch == "Ä");
?

Vielleicht isses Blödsinn aber das is mir halt spontan dazu eingefallen.
thyrver ist offline   Mit Zitat antworten
Alt 25.11.2004, 14:55   #3
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

Nur zur Info:
Es gibt
Character.isLetter(char c)
Character.isLetterOrDigit(char c)
usw.

Könnte daran liegen, daß Dos die Buchstaben anders kodiert.
Du kannst ja mal probieren, was er da ausgibt:
Code:
static boolean isLetter (char ch){
  System.out.println(ch);
  System.out.println(Character.getValue(ch));
  System.out.println(Character.getNumericValue(ch));
  return Character.getNumericalValue(ch)==196; //dez 196 = hex C4
}
Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Alt 25.11.2004, 14:57   #4
dietz
Senior Member
 
Registriert seit: 19.04.2001
Alter: 50
Beiträge: 165


Standard

...ja das habe ich ursprünglich probiert, dabei tritt aber dasselbe Problem auf :-(
Daher dachte ich ich versuchs direkt mit den unicodes, ohne erfolg..

Ich find´s komisch das diese Codezeile mit jedem anderen blöden Zeichen funktioniert, aber nicht mit dem Umlauten.
dietz ist offline   Mit Zitat antworten
Alt 25.11.2004, 15:10   #5
dietz
Senior Member
 
Registriert seit: 19.04.2001
Alter: 50
Beiträge: 165


Standard

@jak:
DOS müsste gleich codieren, wenn ich das ä in der commandshell mit alt + 0228 eingeben bekomme ich auch ein ä raus.
Verzwickte Sache!

Ergänzend:
Aufrufen tu ich IsLetter in der main (String [] args) Methode so:
boolean ch1 = UE6_A2_ZeichenOperationen.isLetter(ch);
if (ch1) {
Out.println (" Mein Zeichen '" +ch+ "' ist ein Buchstabe.");
}
dietz ist offline   Mit Zitat antworten
Alt 25.11.2004, 15:14   #6
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

Was geben meine Codezeilen aus?
Eine boolean Variable ch1 zu nennen ist ungeschickt.
besser wäre entweder
if (UE6_A2_ZeichenOperationen.isLetter(ch)) {
- vielleicht von der lesbarkeit nicht optimal
oder ein Name der auf ein boolean hindeutet wie z.B. isLetter.

Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Alt 25.11.2004, 15:20   #7
dietz
Senior Member
 
Registriert seit: 19.04.2001
Alter: 50
Beiträge: 165


Standard

@jak:

Deine Codezeilen kann ich hier nicht ausführen.
Ich benutze für Ein- und Ausgaben zwei Klassen In und Out und compiliere das ganze dann mit der javac.exe des j2sdk1.4.2_04.
Ich kann deinen Code erst am Abend zu Hause testen, mal schauen was ich da rausbekomme.
dietz ist offline   Mit Zitat antworten
Alt 25.11.2004, 15:26   #8
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

Bei der Antwortgeschwindigkeit entwickelt sich das langsam zu einem Chat .

System.out.println() schreibt in den standard Ausgabestream und geht auf JEDER Java VM (übrigens auch der Error Stream - System.err.println())

<edit>
BTW.: Die Klassen aus dem "Sprechen Sie Java" Buch?
</edit>

Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Alt 25.11.2004, 15:45   #9
dietz
Senior Member
 
Registriert seit: 19.04.2001
Alter: 50
Beiträge: 165


Standard

@jak: ja das kommt schon nahe an chatten ran! *g*

ok system.out.println funktioniert, aber beim Rest motzt der compiler:
.\UE6_A2_ZeichenOperationen.java:29: cannot resolve symbol
symbol : method getValue (char)
location: class java.lang.Character
System.out.println(Character.getValue(ch));


Damit bekomme ich bei allen Umlauten nur ein ? raus:

static boolean isLetter (char ch){
System.out.println(ch);
}

Alle anderen Zeichen mag er ~, +, ], %, ... Sehr merkwürdig.

P.S. Ich habe die Klassen zwar nicht direkt aus dem Buch, glaube aber es sind die gleichen!
dietz ist offline   Mit Zitat antworten
Alt 25.11.2004, 16:33   #10
dietz
Senior Member
 
Registriert seit: 19.04.2001
Alter: 50
Beiträge: 165


Standard

Jetzt wirds mit aber zu bunt!
Wenn ich den eingegebenen Wert als int übernehme bekomme ich für ä 132 raus. Das kann ich auch mit alt + 132 in der commandshell erzeugen.

static boolean isLetter (int ch){
System.out.println(ch);
}
dietz ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:57 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag