summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100074.html
blob: 86a1ed1afd5273a840b022669e7336a7f48fa162 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100070.html;106,k100073.html;107,k100075.html;108,k100078.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100070.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100073.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100075.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100078.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">Kapitel 11 - Strings
</table>
<hr>


<!-- Section -->
<a name="sectlevel2id011004"></a>
<h2>11.4 Die Klasse StringBuilder<a name="ixa100690"></a> </h2>
<hr>
<ul>
<li><a href="k100074.html#sectlevel2id011004">11.4 Die Klasse StringBuilder</a>
<ul>
<li><a href="k100074.html#sectlevel3id011004001">11.4.1 Konstruktoren</a>
<li><a href="k100074.html#sectlevel3id011004002">11.4.2 Einf&uuml;gen von Elementen</a>
<li><a href="k100074.html#sectlevel3id011004003">11.4.3 L&ouml;schen von Elementen</a>
<li><a href="k100074.html#veraendernstringbuilder">11.4.4 Ver&auml;ndern von Elementen</a>
<li><a href="k100074.html#sectlevel3id011004005">11.4.5 L&auml;ngeninformationen</a>
<li><a href="k100074.html#sectlevel3id011004006">11.4.6 Konvertierung in einen String</a>
</ul>
</ul>
<hr>

<p>
Da Objekte des Typs <font color="#000077"><tt>String</tt></font> nicht
dynamisch sind und <font color="#000077"><tt>String</tt></font>-Manipulationen
immer zu neuen &#187;Kopien&#171; des Ursprungsobjektes f&uuml;hren,
entwickelten die Java Ingenieure eine Klasse, die die dynamische Verkettung
von <font color="#000077"><tt>String</tt></font>-Objekten gestattet.
Bereits im JDK 1.0 war hierf&uuml;r die Klasse <a href="index_s.html#ixb100119"><font color=#000080><tt>StringBuffer</tt></font></a>
enthalten, die mit dem JDK 5 durch den <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>
abgel&ouml;st wurde. Beide k&ouml;nnen verwendet werden, um Zeichenketten
zu Manipulieren oder &#187;St&uuml;ck f&uuml;r St&uuml;ck&#171; zusammenzusetzen.


<!-- Section -->
<a name="sectlevel3id011004001"></a>
<h3>11.4.1 Konstruktoren </h3>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
StringBuilder()

StringBuilder(String s)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/StringBuilder.html" onClick="this.href=getApiDoc('java.lang.StringBuilder')"><font color="#660066" size=-1>java.lang.StringBuilder</font></a></td>
</tr>
</table>

<p>
Der parameterlose Konstruktor erzeugt einen leeren <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>.
Wird dagegen ein <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
&uuml;bergeben, erzeugt der Konstruktor ein <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>-Objekt,
das eine Kopie der &uuml;bergebenen Zeichenkette darstellt. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Die Klasse <font color="#000077"><tt>StringBuilder</tt></font> wurde
mit Java 5 eingef&uuml;hrt, davor verwendete man die - immer noch
in der Bibliothek vorhandene - Klasse <font color="#000077"><tt>StringBuffer</tt></font>
<a name="ixa100691"></a>. Beide besitzen die gleichen Methoden. Die
Klasse <font color="#000077"><tt>StringBuilder</tt></font> ist eine
Neuimplementierung der &#187;alten&#171; Klasse und arbeitet auf den
meisten Plattformen schneller und ressourcenschonender. Dies hat sie
vor allem dem Umstand zu verdanken, dass sie nicht f&uuml;r nebenl&auml;ufige
Zugriffe, wie sie in <a href="k100143.html#kapitelmultithreading">Kapitel 22</a>
beschrieben werden, konzipiert ist. Solange wir also nicht mit mehreren
Threads arbeiten werden wir die Klasse <font color="#000077"><tt>StringBuilder</tt></font>
verwenden.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
<tr>
<td><font color="#FFFFFF">&nbsp;JDK1.1-6.0&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
</tr>
</table>


<!-- Section -->
<a name="sectlevel3id011004002"></a>
<h3>11.4.2 Einf&uuml;gen von Elementen </h3>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
StringBuilder append(String s)

StringBuilder insert(int offset, String s)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/StringBuilder.html" onClick="this.href=getApiDoc('java.lang.StringBuilder')"><font color="#660066" size=-1>java.lang.StringBuilder</font></a></td>
</tr>
</table>

<p>
Mit <a name="ixa100692"><a href="index_a.html#ixb100546"><font color=#000080><tt>append</tt></font></a></a>
wird der String <font color="#000077"><tt>s</tt></font> an das Ende
des <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>-Objekts
angeh&auml;ngt. Zur&uuml;ckgegeben wird das auf diese Weise verl&auml;ngerte
<a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>-Objekt
<font color="#000077"><tt>s</tt></font>. Zus&auml;tzlich gibt es die
Methode <a href="index_a.html#ixb100546"><font color=#000080><tt>append</tt></font></a>
in Varianten f&uuml;r das Anh&auml;ngen aller Arten von primitiven
Typen. Anstelle eines <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>-Objekts
wird hier der entsprechende primitive Typ &uuml;bergeben, in einen
String konvertiert und an das Ende des Objekts angeh&auml;ngt. 

<p>
<a name="ixa100693"><a href="index_i.html#ixb100547"><font color=#000080><tt>insert</tt></font></a></a>
f&uuml;gt den String <font color="#000077"><tt>s</tt></font> an der
Position <font color="#000077"><tt>offset</tt></font> in den aktuellen
<a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>
ein. Zur&uuml;ckgegeben wird das auf diese Weise verl&auml;ngerte
<a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>-Objekt
<font color="#000077"><tt>s</tt></font>. Auch diese Methode gibt es
f&uuml;r primitive Typen. Der anstelle eines <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
&uuml;bergebene Wert wird zun&auml;chst in einen <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
konvertiert und dann an der gew&uuml;nschten Stelle eingef&uuml;gt.


<!-- Section -->
<a name="sectlevel3id011004003"></a>
<h3>11.4.3 L&ouml;schen von Elementen </h3>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public StringBuilder deleteCharAt(int index)
public StringBuilder delete(int start, int end)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/StringBuilder.html" onClick="this.href=getApiDoc('java.lang.StringBuilder')"><font color="#660066" size=-1>java.lang.StringBuilder</font></a></td>
</tr>
</table>

<p>
Mit <a name="ixa100694"><a href="index_d.html#ixb100548"><font color=#000080><tt>deleteCharAt</tt></font></a></a>
wird das an Position <font color="#000077"><tt>index</tt></font> stehende
Zeichen entfernt und der <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>
um ein Zeichen verk&uuml;rzt. <a name="ixa100695"><a href="index_d.html#ixb100549"><font color=#000080><tt>delete</tt></font></a></a>
entfernt den Teilstring, der von Position <font color="#000077"><tt>start</tt></font>
bis <font color="#000077"><tt>end</tt></font> reicht, aus dem <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>
und verk&uuml;rzt ihn um die entsprechende Anzahl Zeichen. 

<!-- Section -->

<a name="veraendernstringbuilder"></a>
<h3>11.4.4 Ver&auml;ndern von Elementen </h3>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
void setCharAt(int index, char c)
  throws StringIndexOutOfBoundsException

public StringBuilder replace(int start, int end, String str)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/StringBuilder.html" onClick="this.href=getApiDoc('java.lang.StringBuilder')"><font color="#660066" size=-1>java.lang.StringBuilder</font></a></td>
</tr>
</table>

<p>
Mit der Methode <a name="ixa100696"><a href="index_s.html#ixb100550"><font color=#000080><tt>setCharAt</tt></font></a></a>
wird das an Position <font color="#000077"><tt>index</tt></font> stehende
Zeichen durch das Zeichen <font color="#000077"><tt>c</tt></font>
ersetzt. Falls der <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>
zu kurz ist (also <font color="#000077"><tt>index</tt></font> hinter
das Ende des <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>-Objekts
zeigt), l&ouml;st die Methode eine Ausnahme des Typs <a name="ixa100697"><a href="index_s.html#ixb100523"><font color=#000080><tt>StringIndexOutOfBoundsException</tt></font></a></a>
aus. 

<!-- Section -->

<a name="sectlevel3id011004005"></a>
<h3>11.4.5 L&auml;ngeninformationen </h3>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
int length()

public int capacity()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/StringBuilder.html" onClick="this.href=getApiDoc('java.lang.StringBuilder')"><font color="#660066" size=-1>java.lang.StringBuilder</font></a></td>
</tr>
</table>

<p>
<a name="ixa100698"><a href="index_l.html#ixb100275"><font color=#000080><tt>length</tt></font></a></a>
liefert die L&auml;nge des Objekts, also die Anzahl der Zeichen, die
im <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>
enthalten sind. Mit <a name="ixa100699"><a href="index_c.html#ixb100551"><font color=#000080><tt>capacity</tt></font></a></a>
wird die Gr&ouml;&szlig;e des belegten Pufferspeichers ermittelt.
Dieser Wert ist typischerweise gr&ouml;&szlig;er als der von <a href="index_l.html#ixb100275"><font color=#000080><tt>length</tt></font></a>
zur&uuml;ckgegebene Wert. 

<!-- Section -->

<a name="sectlevel3id011004006"></a>
<h3>11.4.6 Konvertierung in einen String </h3>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
String toString()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/StringBuilder.html" onClick="this.href=getApiDoc('java.lang.StringBuilder')"><font color="#660066" size=-1>java.lang.StringBuilder</font></a></td>
</tr>
</table>

<p>
<a name="ixa100700"></a> Nachdem die Konstruktion eines <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>-Objekts
abgeschlossen ist, kann es mit Hilfe dieser Methode effizient in einen
<a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
verwandelt werden. Die Methode legt dabei keine Kopie des <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>-Objekts
an, sondern liefert einen Zeiger auf den internen Zeichenpuffer. Erst
wenn der <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>
erneut ver&auml;ndert werden soll, wird tats&auml;chlich eine Kopie
erzeugt. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Die sinnvolle Anwendung der Klassen <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
und <a href="index_s.html#ixb100545"><font color=#000080><tt>StringBuilder</tt></font></a>
hat bei vielen Programmen gro&szlig;en Einfluss auf ihr Laufzeitverhalten.
In <a href="k100312.html#kapiteltuning">Kapitel 50</a> gehen wir daher
noch einmal auf die speziellen Performanceaspekte beider Klassen ein
und geben Hinweise zu ihrer sinnvollen Anwendung.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100070.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100073.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100075.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100078.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>