package de.axone.tools; public interface Speller { public String inWords( int number ); public static final Speller DE = new SpellerDe(), EN = new SpellerEn(), CNT = new CounterEn() ; public static class SpellerDe implements Speller { private static String[] einer = { "Null", "Ein", "Zwei", "Drei", "Vier", "Fünf", "Sechs", "Sieben", "Acht", "Neun", "Zehn", "Elf", "Zwölf" }; @Override public String inWords( int i ) { return InWords( i ); } public static String InWords( int i ) { if( i == 0 ) { return einer[ 0 ]; } else if( i == 1 ) { return "Eins"; } else if( i <= 12 ) { return einer[ i ]; } else if( i < 100 ) { int e = i % 10; int h = i / 10; if( i <= 19 ) { if( i == 17 ) { return "Siebzehn"; } else { return einer[ e ] + "zehn"; } } else if( i == 20 ) { return "Zwanzig"; } else if( i <= 29 ) { return einer[ e ] + "undzwanzig"; } else { String z = einer[ h ]; if( h == 3 ) { z += "sig"; } else { z += "zig"; } if( e == 0 ) { return z; } else { return einer[ e ] + "und" + z.toLowerCase(); } } } else if( i == 100 ) { return "Hundert"; } else { return Integer.toString( i ); } } } public static class SpellerEn implements Speller { private static String[] oner = { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelf", "Thirteen", null, "Fifteen" }; @Override public String inWords( int i ) { return InWords( i ); } public static String InWords( int i ) { if( i <= 13 || i == 15 ) { return oner[ i ]; } else { int o = i % 10; int t = i / 10; if( i <= 19 ) { return oner[ o ] + "teen"; } else if( i < 100 ) { String r; if( t == 2 ) { r = "Twenty"; } else if( t == 3 ) { r = "Thirty"; } else { if( oner[ t ].charAt( oner[ t ].length() - 1 ) == 'e' ) { r = oner[ t ].substring( 0, oner[ t ].length() - 1 ); } else { r = oner[ t ]; } r += "ty"; } if( o > 0 ) { r += oner[ o ].toLowerCase(); } return r; } else if( i == 100 ) { return "Hundred"; } } return "(E:" + Integer.toString( i ) + ")"; } } public static class CounterEn implements Speller { private static String [] words = { "First", "Second", "Third", "Fourth", "Fifth" }; @Override public String inWords( int number ) { if( number < 1 ) throw new IllegalArgumentException( "Cannot count zero" ); if( number >= 1 && number <=5 ) return words[ number-1 ]; return Speller.EN.inWords( number ) + "th"; } } }