Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich muss ein programm schreiben, das zeichen für zeichen der standarteingabe liest und prüft ob es wie folgt eingegeben wird: \uxxxx wobei das x für die hex ziffern stehn.
Code:
public class Ersatz {
public static void main (String[]args) throws Exception {
int zahl1;
int zahl2;
int zahl3;
int zahl4;
int zahl5;
int zahl6;
zahl1 = System.in.read();
if (! (zahl1==92)) {
System.out.println("falsch: backslash eingeben");
return;
}
zahl2 = System.in.read();
if (! (zahl2=='u')) {
System.out.println("falsch: u eingeben");
return;
}
so weit so gut, nun muss das programm erkennen, dass es sich um eine escape funktion handelt und diese dann ausgeben.
wenn ich also eingebe: \u0030 dann soll mir das programm das dazugehörige zeichen, hier also die 0, ausgben.
wie stelle ich das an?
Einfacher ist evtl. die gesamte Eingabe komplett einzulesen und dann weiterzumachen.
BufferedReader kann das sicherlich, ansonsten die bytes zusammenbasteln,
Bei kodieren hilft vielleicht folgendes
Code:
BufferedReader reader = new BufferedReader(System.in);
String eingabe = reader.readLine();
String st = "30";
int i = Integer.parseInt(st,16);
System.out.println(i+" "+((char) i));
String st = "\u0022" ist ein String der Länge eins,
nur im Quellcode kann man den so lange schreiben,
im Programm ist des dann ein char wie jeder andere,
es ist unmöglich sowas dynamisch zusammenzusetzen,
auch der Kompiler macht beim Übersetzen des Quellcodes praktisch das, was du da machen sollst,
\u0022 als 6 einzelne Zeichen einlesen und in ein char umwandeln
wie könnte ich dann das programm erweitern, dass es mir z.b. bei der eingabe von \u006B das k ausgibt?
Code:
public class Ersatz {
public static void main (String[]args) throws Exception {
int zahl1;
int zahl2;
int zahl3;
int zahl4;
int zahl5;
int zahl6;
zahl1 = System.in.read();
if (! (zahl1==92)) {
System.out.println("falsch: backslash eingeben");
return;
}
zahl2 = System.in.read();
if (! (zahl2=='u')) {
System.out.println("falsch: u eingeben");
return;
}
zahl3 = System.in.read();
if (! (zahl3>='0' && zahl3<='9') || (zahl3>='A' && zahl3<='F')) {
System.out.println("falsche eingabe an der dritten stelle: wert zwischen 0-f");
return;
}
zahl4 = System.in.read();
if (! (zahl4>='0' && zahl4<='9') || (zahl4>='A' && zahl4<='F')) {
System.out.println("falsche eingabe an der vierten stelle: wert zwischen 0-f");
return;
}
zahl5 = System.in.read();
if (! ((zahl5>='0' && zahl5<='9') || (zahl5>='A' && zahl5<='F'))) {
System.out.println("falsche eingabe an der fnften stelle: wert zwischen 0-f");
return;
}
zahl6 = System.in.read();
if (! ((zahl6>='0' && zahl6<='9') || (zahl6>='A' && zahl6<='F'))) {
System.out.println("falsche eingabe an der sechsten stelle: wert zwischen 0-f");
return;
}
System.out.println(zahl1+""+zahl2+""+zahl3+""+zahl4+""+zahl5+""+zahl6);
//System.out.println(zahl1+zahl2+zahl3+zahl4+zahl5+zahl6);
char a = (char) zahl1;
char b = (char) zahl2;
char c = (char) zahl3;
char d = (char) zahl4;
char e = (char) zahl5;
char f = (char) zahl6;
//System.out.println((char)zahl1+""+(char)zahl2+""+(char)zahl3+""+(char)zahl4+""+(char)zahl5+""+(char)zahl6);
//System.out.println(Integer.toHexString(f));
}
}
du solltest unbeding ein Array
int[] zahl = new int[6];
anlegen und mit Indexen arbeiten
die vier Code-Blöcke zu zahl3-6 ließen sich dann zu einem zusammenfassen,
nur jeweils zahl3 durch zahl ersetzen und i geschickt hochzählen von 2 bis 5
wenn du nämlich irgendwann statt Großbuchstaben auch Kleinbuchstaben zulassen willst,
oder sonstige Änderungen dazukommen,
dann musst du alles nur einmal statt viermal ändern,
-----------------
wenn du deine Zahlen 3-6 zusammenfasst, dann hast du doch sowas wie 'A079' oder?
ich habe für einen solchen Fall doch schon
Code:
int i = Integer.parseInt(st,16);
System.out.println(i+" "+((char) i));
vorgeschlagen, oder was spricht dagegen?
falls Integer wie BufferedReader verboten ist ,
kann man sowas natürlich auch manuell nachbauen,
ist ja kein Ding