4.4 Ein paar kleine Helfer
 
4.4.1 Strings einer gegebenen Länge erzeugen und rechtsbündig ausgeben
 
An einigen Stellen in den Bibliotheken gibt es noch Nachholbedarf. Zum Beispiel an einer Funktion, die eine Zeichenkette einer vorgegebenen Länge aus einem einzelnen Zeichnen erzeugt. Selbst in einfachsten Basic-Dialekten gibt es solche Funktionen. In Java müssen wir diese jedoch selbst entwickeln.
Zuerst ist zu fragen, ob die Zeichenkette als String oder als StringBuffer bereitgestellt werden soll? In der Regel wird dies ein String sein. Auch ohne Bibliotheksfunktionen lässt sich mit dem Plus-Operator eine Zeichenkette in einer Schleife zusammensetzen. Das ist sicherlich die erste Idee:
String s = "";
for ( int i = 0; i < len; i++ )
s += c;
Hier ist len die Länge des Ergebnis-Strings und c das Zeichen.
In einer kritischen Geschwindigkeitsbetrachtung fällt das dauernde Erzeugen von temporären StringBuffer-Objekten auf. Die Lösung ist langsam. Anders könnten wir dies lösen, indem wir ein char-Feld der passenden Größe erzeugen, dies mit den Zeichen füllen und anschließend einmalig in einen String konvertieren. An Stelle des Zeichenfelds könnten wir auch gleich einen StringBuffer wählen.
Falls wir immer ein fixes Zeichen verwenden und die String-Länge in einem festen Bereich bleibt, so ist eine andere Möglichkeit noch viel eleganter (aber nicht unbedingt schneller). Sie arbeitet mit der substring()-Methode. Wir schneiden aus einem großen String mit festen Zeichen einfach einen String mit der benötigten Länge heraus. Damit lässt sich auch flott eine Zeile formulieren, die einen Text mit so vielen Leerzeichen füllt, dass dieser rechtsbündig ist:
text = " ".substring( text.length() );
Die Anzahl der Zeichen muss natürlich mit der Zeichenkettenlänge harmonisieren.
4.4.2 Teile im String ersetzen
 
Die Klassenbibliothek stellt dafür keine Funktionen bereit. Daher müssen wir uns diese Methode selbst implementieren. Nachfolgendes Programm ersetzt in einem String s alle auftretenden Strings search durch replace.
Listing 4.1
SubstituteDemo.java
class SubstituteDemo
{
public static String substr( String s, String search, String replace )
{
StringBuffer s2 = new StringBuffer();
int i = 0, j = 0;
int len = search.length();
while ( j > -1 )
{
j = s.indexOf( search, i );
if ( j > -1 )
{
s2.append( s.substring(i,j) );
s2.append( replace );
i = j + len;
}
}
s2.append( s.substring(i, s.length()) );
return s2.toString();
}
public static void main( String args[] )
{
System.out.println(
substr( "Die Deutschen gucken im Schnitt täglich 201"
+ " Minuten in die Röhre",
"i",
"ia" ) );
// Quelle: GfK
}
}
Die Klasse StringBuffer stellt die Ersetzungsoperation replace(int start, int end, String s) bereit. Über diese und indexOf() ließe sich wiederum eine ähnliche Methode substr() für StringBuffer-Objekte konstruieren.
|