summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100115.html
blob: a527abb0249197e1790a85bedf925af4ce0b0079 (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
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
<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,k100114.html;106,k100114.html;107,k100116.html;108,k100120.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="k100114.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100114.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100116.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100120.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 17 - Utility-Klassen II
</table>
<hr>


<!-- Section -->
<a name="sectionregex"></a>
<h2>17.1 <a name="ixa101142">Regul&auml;re Ausdr&uuml;cke</a></h2>
<hr>
<ul>
<li><a href="k100115.html#sectionregex">17.1 Regul&auml;re Ausdr&uuml;cke</a>
<ul>
<li><a href="k100115.html#sectlevel3id017001001">17.1.1 Die Klasse Pattern</a>
<li><a href="k100115.html#sectlevel3id017001002">17.1.2 Die Klasse Matcher</a>
<li><a href="k100115.html#sectlevel3id017001003">17.1.3 Vergleich einer Zeichenkette mit einem regul&auml;ren Ausdruck</a>
<li><a href="k100115.html#sectlevel3id017001004">17.1.4 Teilen einer Zeichenkette mit einem regul&auml;ren Ausdruck</a>
</ul>
</ul>
<hr>

<p>
Seit der Version 1.4 enth&auml;lt das JDK auch Klassen zur Verwendung
von regul&auml;ren Ausdr&uuml;cken. Dabei handelt es sich um Muster,
die Mengen von Zeichenketten beschreiben und stellvertretend f&uuml;r
diese stehen. 

<p>
Wenn Sie schon einmal die Datei-Suchfunktionalit&auml;t Ihres Betriebssystems
verwendet haben, haben Sie wahrscheinlich - ohne es zu bemerken -
einen regul&auml;ren Ausdruck verwendet. Um beispielsweise alle Dateien
in einem Ordner aufzulisten, suchen Sie typischerweise mit dem Muster
<font color="#000077"><tt>*.*</tt></font>. Dabei steht der Stern stellvertretend
f&uuml;r eine beliebige Zeichenkette und schon haben Sie einen (wenn
auch recht einfachen) regul&auml;ren Ausdruck verwendet, um nicht
jeden Dateinamen einzeln hinschreiben zu m&uuml;ssen. 

<!-- Section -->

<a name="sectlevel3id017001001"></a>
<h3>17.1.1 Die Klasse <a name="ixa101143">Pattern</a></h3>

<p>
Um einen regul&auml;ren Ausdruck zu erzeugen, h&auml;lt das JDK die
Klasse <font color="#000077"><tt>Pattern</tt></font> im Package <font color="#000077"><tt>java.util.regex</tt></font>
bereit. So ist <font color="#000077"><tt>a*b</tt></font> beispielsweise
ein <font color="#000077"><tt>Pattern</tt></font> zur Beschreibung
der Zeichenketten <font color="#000077"><tt>b</tt></font>, <font color="#000077"><tt>ab</tt></font>,
<font color="#000077"><tt>aab</tt></font> und so weiter. Wobei der
Stern - wie allgemein &uuml;blich - f&uuml;r eine beliebige Menge
von Zeichen steht. Der obige Ausdruck lie&szlig;t sich also: &#187;Eine
beliebige Anzahl von kleinen <font color="#000077"><tt>a</tt></font>s,
gefolgt von einem <font color="#000077"><tt>b</tt></font>&#171;. 

<p>
Die folgende Tabelle zeigt einige h&auml;ufig verwendete Platzhalter.
Die M&ouml;glichkeiten regul&auml;rer Ausdr&uuml;cke in Java sind
dabei so vielf&auml;ltig, dass Sie allein ein ganzes Kapitel f&uuml;llen
w&uuml;rden. Eine vollst&auml;ndige Liste findet man z.B. in den JavaDocs
zur Klasse <font color="#000077"><tt>Pattern</tt></font>. <a name="tableid017001"></a>

<p>
<table cols=2 border width=66%>

<tr>
<td valign=top align=left width=20%><b>Symbol</b></td>
<td valign=top align=left width=80%><b>Bedeutung</b></td></tr>
<tr>
<td valign=top align=left>.</td>
<td valign=top align=left>Ein beliebiges einzelnes Zeichen</td></tr>
<tr>
<td valign=top align=left>*</td>
<td valign=top align=left>Eine beliebige Menge von Zeichen</td></tr>
<tr>
<td valign=top align=left>\d</td>
<td valign=top align=left>Eine Zahl zwischen 0 und 9</td></tr>
<tr>
<td valign=top align=left>\D</td>
<td valign=top align=left>Ein Zeichen das keine Zahl darstellt.</td></tr>
<tr>
<td valign=top align=left>\s</td>
<td valign=top align=left>Ein beliebiges Leerzeichen (Whitespace)</td></tr>
<tr>
<td valign=top align=left>\S</td>
<td valign=top align=left>Ein Zeichen, das kein Leerzeichen ist</td></tr>
</table>
<p><i>
Tabelle 17.1: H&auml;ufige Elemente f&uuml;r regul&auml;re Ausdr&uuml;cke
in Java</i></p>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Achten Sie bei der Programmierung von regul&auml;ren Ausdr&uuml;cken
darauf, dass das Baskslash-Zeichen (<font color="#000077"><tt>\</tt></font>)
in Strings reserviert ist und durch einen doppelten Backslash (<font color="#000077"><tt>\\</tt></font>)
kodiert werden muss.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
<tr>
<td><font color="#FFFFFF">&nbsp;Warnung&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
</tr>
</table>


<!-- Section -->
<a name="sectlevel3id017001002"></a>
<h3>17.1.2 Die Klasse <a name="ixa101144">Matcher</a></h3>

<p>
W&auml;hrend die Klasse <font color="#000077"><tt>Pattern</tt></font>
einen regul&auml;ren Ausdruck repr&auml;sentiert, k&ouml;nnen Sie
mit Hilfe der Methode <a href="index_m.html#ixb100873"><font color=#000080><tt>matcher</tt></font></a>
ein <font color="#000077"><tt>Matcher</tt></font>-Objekt erzeugen,
das verwendet werden kann, um eine beliebige Zeichenkette auf den
regul&auml;ren Ausdruck zu testen. 

<p>
Die Klassen f&uuml;r Pattern und Matcher sind dabei getrennt worden,
da erstere auf der einen Seite relativ komplexe Objekte sind, auf
der anderen allerdings auch threadsafe programmiert sind und in nebenl&auml;ufigen
Programmen von verschiedenen Threads gemeinsam genutzt werden k&ouml;nnen.
<font color="#000077"><tt>Matcher</tt></font> auf der anderen Seite
sind leichtgewichtige Objekte, die nur von einem Thread verwendet
werden sollten. In einem Satz: Sie k&ouml;nnen jeden ben&ouml;tigten
Ausdruck durch ein global zu verwendendes <font color="#000077"><tt>Pattern</tt></font>
beschreiben und von diesem bei Bedarf beliebig viele <font color="#000077"><tt>Matcher</tt></font>-Objekte
erzeugen lassen. 

<!-- Section -->

<a name="sectlevel3id017001003"></a>
<h3>17.1.3 Vergleich einer Zeichenkette mit einem regul&auml;ren Ausdruck</h3>

<p>
Neben der M&ouml;glichkeit, Zeichenketten untereinander auf (partielle)
Gleichheit zu &uuml;berpr&uuml;fen, wie es in <a href="k100072.html#vergleichzeichenketten">Abschnitt 11.2.4</a>
beschrieben wird, kann mit Hilfe von regul&auml;ren Ausdr&uuml;cken
auch &uuml;berpr&uuml;ft werden, ob eine Zeichenkette von einem Ausdruck
beschrieben wird. Hierzu erzeugt man zun&auml;chst ein Pattern-Objekt,
das den Ausdruck repr&auml;sentiert und anschlie&szlig;end ein <font color="#000077"><tt>Matcher</tt></font>-Objekt,
das zum Testen verwendet werden kann. Das folgende Listing verdeutlicht
dies: 
<a name="listingid017001"></a>

<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
<tr>
<td valign=top>
<font color="#000055">
<pre>
<font color="#555555">001 </font><font color="#00AA00">/* Listing1701.java */</font>
<font color="#555555">002 </font>
<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.regex.*;
<font color="#555555">004 </font>
<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1701
<font color="#555555">006 </font>{
<font color="#555555">007 </font>  <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
<font color="#555555">008 </font>  {
<font color="#555555">009 </font>    <font color="#00AA00">// Erzeugen eines Pattern-Objektes f&uuml;r den Ausdruck a*b</font>
<font color="#555555">010 </font>    Pattern p = Pattern.compile(<font color="#0000FF">"a*b"</font>);
<font color="#555555">011 </font>
<font color="#555555">012 </font>    <font color="#00AA00">// Erzeugen eines Matcher-Objektes f&uuml;r die Zeichenkette</font>
<font color="#555555">013 </font>    Matcher m = p.matcher(<font color="#0000FF">"aaaaab"</font>);
<font color="#555555">014 </font>		
<font color="#555555">015 </font>    <font color="#00AA00">// Test, ob die Zeichenkette vom Ausdruck beschrieben wird</font>
<font color="#555555">016 </font>    <font color="#006699">boolean</font> b = m.matches();  
<font color="#555555">017 </font>  }
<font color="#555555">018 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing1701.java"><font color="#000055" size=-1>Listing1701.java</font></a></td>
</tr>
</table>
<i>
Listing 17.1: Regul&auml;re Ausdr&uuml;cke</i></p>

<p>
Auff&auml;llig an diesem Listing ist, dass weder <font color="#000077"><tt>Pattern</tt></font>
noch <font color="#000077"><tt>Matcher</tt></font> &uuml;ber einen
Konstruktor erzeugt werden. Stattdessen verwenden wir die statische
Methode <font color="#000077"><tt>compile</tt></font>, die ein Pattern-
Objekt zur&uuml;ck gibt und die Methode <font color="#000077"><tt>matcher</tt></font>,
um einen <font color="#000077"><tt>Matcher</tt></font> zu erzeugen.
Der Grund liegt m&ouml;glicherweise darin, dass das JDK die Pattern
auf diese Weise intern cachen kann und auch bei der &#187;zweiten&#171;
Kompilierung das gleiche Objekt zur&uuml;ckgibt - aber verlassen Sie
sich nicht darauf. 

<p>
Wie bereits weiter oben beschrieben lassen sich einmal erzeugte Pattern
f&uuml;r viele Matcher wiederverwenden und helfen so, wertvolle Ressourcen
zu sparen. Um nur eine einzige Zeichenkette auf ein Pattern zu testen,
kann man aber auch die folgende Kurzform verwenden: 
<a name="listingid017002"></a>

<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
<tr>
<td valign=top>
<font color="#000055">
<pre>
<font color="#555555">001 </font><font color="#00AA00">/* Listing1702.java */</font>
<font color="#555555">002 </font>
<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.regex.*;
<font color="#555555">004 </font>
<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1702
<font color="#555555">006 </font>{
<font color="#555555">007 </font>  <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
<font color="#555555">008 </font>  {
<font color="#555555">009 </font>    <font color="#00AA00">// Testet die Zeichenkette auf das Pattern</font>
<font color="#555555">010 </font>    <font color="#006699">boolean</font> b = Pattern.matches(<font color="#0000FF">"a*b"</font>, <font color="#0000FF">"aaaaab"</font>);
<font color="#555555">011 </font>  }
<font color="#555555">012 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing1702.java"><font color="#000055" size=-1>Listing1702.java</font></a></td>
</tr>
</table>
<i>
Listing 17.2: Kurzer Zeichenketten-Vergleich mit regul&auml;ren Ausdr&uuml;cken</i></p>

<p>
Bei dieser Kurzversion wird das Pattern intern kompiliert, anschlie&szlig;end
ein passender Matcher erzeugt und schlie&szlig;lich nur das Resultat
zur&uuml;ckgegeben. Dieser &#187;Einzeiler&#171; ist zwar markant,
allerdings l&auml;sst sich das Pattern nicht wiederverwenden. 

<p>
Und es geht sogar noch k&uuml;rzer und ohne explizite Verwendung der
Klassen im Package <font color="#000077"><tt>java.util.regex</tt></font>,
wie es das folgende Listing demonstriert. Seit dem JDK 5 stellt die
Klasse <font color="#000077"><tt>String</tt></font> n&auml;mlich die
Methode <font color="#000077"><tt>matches</tt></font> zur Verf&uuml;gung,
hinter der sich nichts anderes als oben beschriebene Kurzform verbirgt.
<a name="listingid017003"></a>

<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
<tr>
<td valign=top>
<font color="#000055">
<pre>
<font color="#555555">001 </font><font color="#00AA00">/* Listing1703.java */</font>
<font color="#555555">002 </font>
<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1703
<font color="#555555">004 </font>{
<font color="#555555">005 </font>  <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
<font color="#555555">006 </font>  {
<font color="#555555">007 </font>    <font color="#00AA00">// Testet die Zeichenkette auf das Pattern</font>
<font color="#555555">008 </font>    <font color="#006699">boolean</font> b = <font color="#0000FF">"aaaaab"</font>.matches(<font color="#0000FF">"a*b"</font>);
<font color="#555555">009 </font>  }
<font color="#555555">010 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing1703.java"><font color="#000055" size=-1>Listing1703.java</font></a></td>
</tr>
</table>
<i>
Listing 17.3: Strings und regul&auml;re Ausdr&uuml;cke</i></p>


<!-- Section -->
<a name="sectlevel3id017001004"></a>
<h3>17.1.4 Teilen einer Zeichenkette mit einem regul&auml;ren Ausdruck</h3>

<p>
Neben dem Test auf &Auml;quivalenz erlauben es regul&auml;re Ausdr&uuml;cke
auch, Teile einer Zeichenkette zu ersetzen oder lange Zeichenketten
in mehrere Teile aufzuspalten (engl. <i>Splitting</i>). F&uuml;r letzteres
besitzt die Klasse <font color="#000077"><tt>Pattern</tt></font> die
Methoden <a href="index_s.html#ixb100540"><font color=#000080><tt>split</tt></font></a>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public String[] split(CharSequence input)

public String[] split(CharSequence input, int limit)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/regex/Pattern.html" onClick="this.href=getApiDoc('java.util.regex.Pattern')"><font color="#660066" size=-1>java.util.regex.Pattern</font></a></td>
</tr>
</table>

<p>
Mit Hilfe des zweiten Parameters kann dabei angegeben werden, in wieviele
Teile die Zeichenkette maximal aufgeteilt werden soll. Er ist eine
Obergrenze f&uuml;r die Gr&ouml;&szlig;e des zur&uuml;ckgegebenen
Arrays. Wird als Limit eine negative Zahl angeben, wird die Zeichenkette
beliebig oft durch das Pattern geteilt. Beide Methoden verhalten sich
dann identisch. 

<p>
Das folgende Listing zeigt das Splitting der Zeichenkette, die uns
schon im Kapitel &uuml;ber Strings begegnet ist: 
<a name="listingid017004"></a>

<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
<tr>
<td valign=top>
<font color="#000055">
<pre>
<font color="#555555">001 </font><font color="#00AA00">/* Listing1704.java */</font>
<font color="#555555">002 </font>
<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.regex.*;
<font color="#555555">004 </font>
<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1704
<font color="#555555">006 </font>{
<font color="#555555">007 </font>  <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
<font color="#555555">008 </font>  {
<font color="#555555">009 </font>    <font color="#00AA00">// Der zu verwendende Testsatz</font>
<font color="#555555">010 </font>    String satz = <font color="#0000FF">"Dies ist nur ein Test"</font>;
<font color="#555555">011 </font>    
<font color="#555555">012 </font>    <font color="#00AA00">// Jedes Whitespace-Zeichen soll zur </font>
<font color="#555555">013 </font>    <font color="#00AA00">// Trennung verwendet werden</font>
<font color="#555555">014 </font>    Pattern p = Pattern.compile(<font color="#0000FF">"\\s"</font>);
<font color="#555555">015 </font>    
<font color="#555555">016 </font>    <font color="#00AA00">// Verwendung der Methode split</font>
<font color="#555555">017 </font>    String[] result = p.split(satz);
<font color="#555555">018 </font>    <font color="#0000AA">for</font> (<font color="#006699">int</font> x=0; x&lt;result.length; x++) {
<font color="#555555">019 </font>      System.out.println(result[x]);
<font color="#555555">020 </font>    }
<font color="#555555">021 </font>  }
<font color="#555555">022 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing1704.java"><font color="#000055" size=-1>Listing1704.java</font></a></td>
</tr>
</table>
<i>
Listing 17.4: Zerlegen von Zeichenketten</i></p>

<p>
Soll das Pattern nicht wiederverwendet werden, kann man auch in diesem
Fall auf eine &auml;quivalente Methode der Klasse <font color="#000077"><tt>String</tt></font>
zur&uuml;ckgreifen, wie bereits in <a href="k100072.html#stringzerlegen">Abschnitt 11.2.7</a>
beschrieben.
<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="k100114.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100114.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100116.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100120.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>