Schreibe eine Funktion speekLikeAChinese(String s), die einen übergebenen
java.lang.String
auf dem Bildschirm bringt, aber den Buchstaben "r" als "l" ausgibt.
Sprachwissenschaftler sind der Ansicht, dass auch nach dem Entfernen von Vokalen
der Text noch lesbar bleibt. Schreibe eine Funktion String removeVovel(String
s), die aus einem
java.lang.String
s die Vokale entfernt. Stimmt es, was die Wissenschaftler sagen?
Die Quersumme einer Zahl bildet man durch die Addition jeder Ziffer der Zahl. Wenn die Zahl etwa 10938 lautet, so ist die Quersumme 1+0+9+3+8 = 21.
int sumOfTheDigits(long value), die
die Quersumme einer Zahl berechnet.int sumOfTheDigits(String value)
dazu, die die Ziffern in einem
java.lang.String annimmt.Ein Morse-Funkspruch besteht aus kurzen und langen Symbolen, die mit .
und - angedeutet sind. Jeder Buchstabe ist durch ein Leerzeichen getrennt.
Kopiere die folgende Definition in ein Programm, welches eine Zeichenkette in das
Morse-Alphabet umsetzt.
// A .- N -. 0 ----- // B -... O --- 1 .---- // C -.-. P .--. 2 ..--- // D -.. Q --.- 3 ...-- // E . R .-. 4 ....- // F ..-. S ... 5 ..... // G --. T - 6 -.... // H .... U ..- 7 --... // I .. V ...- 8 ---.. // J .--- W .-- 9 ----. // K -.- X -..- // L .-.. Y -.-- // M -- Z --..
Nicht bekannte Zeichen sollen übersprungen werden.
Bei der so genannten Cäsar-Verschlüsselung verschiebt man jedes Zeichen um vier Positionen im Alphabet, das heißt, aus A wird D, aus B wird E und so weiter. Am Ende des Alphabets beginnen wir wieder von vorne und so ergibt X->A, Y->B,Z->C.
String caesar(String s), die die
Verschlüsselung vornimmt, und String decaesar(String s), die sie
wieder zurücknimmt. Eine Funktion roman2Decimal(String s) soll eine Zeichenkette
s vom römischen Zahlensystem ins dezimale übersetzen. Die Zahlzeichen
mit der Bedeutung sind:
| M = 1000 | D = 500 | C = 100 | L = 50 |
| X = 10 | V = 5 | I = 1 |
Ist auf dem Bildschirm für einen ganzen Text nicht mehr viel Platz, so wird der Text gerne mit ... abgekürzt. Wir finden diese Punkte zum Beispiel im Explorer oder im EMail-Programm.
String abbreviate(String s,
int len), die einen gegebenen
java.lang.String mit ... abkürzt. Die entstehende Zeichenkette soll
dabei nicht länger als len Zeichen lang werden. abbreviate("Pimpels are ugly", 6) ergibt
"Pim...". Eine Funktion printUnderline(String s, String underline) soll die
Zeichenkette underline in s unterstreichen. Dazu sollen
zwei Ausgabezeilen aufgebaut werden, etwa so:
Man wird nicht dadurch besser, dass man andere schlecht macht.
------
Aus einem Wörterbuch soll ein Computer per Zufall ein Wort auswählen. Wir sollen dieses Wort erraten und dürfen pro Runde genau einen Buchstaben wählen.
Schreibe eine Methode String onlyNumbers(String), die aus einem
beliebigen String nur Zahlen, +, - und Dezimaltrenner (also . und ,) zurückgibt.
Beispiel onlyNumbers("ABC 12,324 ZB") ergibt "12,324".
Implementiere double stringDoubleToDouble(String), der eine Zeichenkette
in ein double konvertiert. Als Dezimaltrenner sind , und
. erlaubt.
Implementiere aus den beiden Funktionen die Funktion double toFrequence(String),
die in etwa Folgendes macht: toFrequence("12,3 Mhz") ergibt 12.3 vom
Typ double.
Schreibe ein Java-Programm, welches untersucht, ob die als Kommandozeilen-Argumente angegebenen Wörter Palindrome sind. Ein Palindrom ist ein Wort, das sich von vorne wie von hinten gleich liest, etwa Otto oder auch 121.
boolean isPalindrom(String s).
isPalindromCaseInsensitive(String
s), sodass es unabhängig von der Groß-/Kleinschreibung wird. isPalindromSpaceIrrelevant(String
s).Schreibe eine Funktion String compressSpace(StringBuilder s), die
mehr als zwei Leerzeichen in dem übergebenen
java.lang.StringBuilder
zu einem Leerzeichen zusammenschmilzen lässt.
Peter Pan sucht eine Funktion zum Pattern Matching. Sie soll, ähnlich wie
strstr() in C, in einem String nach einem Suchstring suchen. Der Suchstring
soll dabei aber "*" (Ersatz für mehrere Zeichen) sowie "?" enthalten.
Nun erhält er eine Lösung, doch leider
in C. :-( Wer kann Peter Pan helfen?
Schreibe eine Klasse WordWrapper mit einer statischen Funktion
String wrapWord(String s, int len), die eine Zeichenkette s
in kleine Teilzeichenketten der Länge len zerlegt und mit Return getrennt
wieder zurückgibt. Mit einem String
"Der Sehnsucht entgegen, sie erleben. Wer kann das schon. Den Träumen entgegen,
"+
"sie erleben. Wer macht das schon. Den Gefühlen entgegen, sie erleben.
Wer wagt das schon. "+
"Der Liebe entgegen, sie erleben. Wer darf das schon."
wird zum Beispiel bei einer Zeilenlänge von 20 folgender String zurückgegeben:
Der Sehnsucht
entgegen, sie
erleben. Wer kann
das schon. Den
Träumen entgegen,
sie erleben. Wer
macht das schon.
Den Gefühlen entgegen,
sie erleben. Wer
wagt das schon. Der
Liebe entgegen, sie
erleben. Wer darf
das schon.
Obwohl die Klasse
java.lang.String
eine ganze Reihe nützlicher Methoden bietet, ist sie doch nicht ohne Schwachstellen.
So fehlt in der aktuellen Version des JDK beispielsweise eine Methode, die es erlaubt,
jedes Auftreten eines vorgegebenen Teilstrings gegen einen anderen auszutauschen.
Zwar gibt es die Methode replace() aus
java.lang.String,
diese erlaubt es aber lediglich, ein einzelnes Zeichen gegen ein anderes auszutauschen.
Schreibe eine Methode replaceString(), die in einem gegebenen String
alle Vorkommen eines Strings s1 gegen einen String s2
austauscht. s1 und s2 dürfen dabei beliebig (auch unterschiedlich)
lang sein.
Löse die Aufgabe einfaches Match.
Analysiere nachfolgendes Programmsegment:
double d = 12345.67890; DecimalFormat df = new DecimalFormat( "###,##0.00" ); System.out.println( df.format(d) );
Was macht die Klasse
java.text.DecimalFormat?
Welche Formatierungsanweisungen sind erlaubt? Stelle eine Tabelle zusammen und belege
die Formatierungen mit einem Beispiel. Die Klasse
java.text.DecimalFormat
existiert nicht alleine für die Formatierung. Es gibt noch einige "Verwandte". Welche
sind das? Nenne Aufgabenbereiche, Unterschiede und Gemeinsamkeiten.