public class StreamProg {
public static void main (String [] args) {
try {
int ch;
CharEingabeStrom cs;
cs = new StringLeser (args[0]);
cs = new UmlautSzFilter (cs);
cs = new GrossBuchstabenFilter (cs);
while ((ch = cs.read()) != -1)
System.out.println ((char) (ch));
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println ("usage: java StreamProg arg1");
}
}
interface CharEingabeStrom {
int read();
}
public static class StringLeser implements CharEingabeStrom {
private String quelle;
private int index;
public StringLeser (String quelle) {
this.quelle = quelle;
}
@Override
public int read () {
if ((index == quelle.length()))
return -1;
return quelle.charAt (index++);
}
}
public static class GrossBuchstabenFilter implements CharEingabeStrom {
private CharEingabeStrom quelle;
public GrossBuchstabenFilter (CharEingabeStrom quelle) {
this.quelle = quelle;
}
@Override
public int read () {
int zeichen = quelle.read();
if (zeichen == -1)
return -1;
return Character.toUpperCase ((char) zeichen);
}
}
public static class UmlautSzFilter implements CharEingabeStrom {
private CharEingabeStrom quelle;
private int puffer = -1;
public UmlautSzFilter (CharEingabeStrom quelle) {
this.quelle = quelle;
}
@Override
public int read () {
if (puffer != -1) {
int zeichen = puffer;
puffer = -1;
return zeichen;
}
else {
int zeichen = quelle.read ();
if (zeichen == -1)
return -1;
switch ((char) zeichen) {
case '\u00C4':
puffer = 'e';
return 'A';
case '\u00D6':
puffer = 'e';
return 'O';
case '\u00DC':
puffer = 'e';
return 'U';
case '\u00E4':
puffer = 'e';
return 'a';
case '\u00F6':
puffer = 'e';
return 'o';
case '\u00FC':
puffer = 'e';
return 'u';
case '\u00DF':
puffer = 's';
return 's';
default:
return zeichen;
}
}
}
}
}