KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > susebox > jtopas > StringSource


1 /*
2  * StringSource.java: TokenizerSource implementation for strings.
3  *
4  * Copyright (C) 2004 Heiko Blau
5  *
6  * This file belongs to the JTopas Library.
7  * JTopas is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU Lesser General Public License as published by the
9  * Free Software Foundation; either version 2.1 of the License, or (at your
10  * option) any later version.
11  *
12  * This software is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE.
15  * See the GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License along
18  * with JTopas. If not, write to the
19  *
20  * Free Software Foundation, Inc.
21  * 59 Temple Place, Suite 330,
22  * Boston, MA 02111-1307
23  * USA
24  *
25  * or check the Internet: http://www.fsf.org
26  *
27  * Contact:
28  * email: heiko@susebox.de
29  */

30
31 package de.susebox.jtopas;
32
33
34 //-----------------------------------------------------------------------------
35
// Class StringSource
36
//
37

38 /**
39  * Implementation of the {@link TokenizerSource} and its extension
40  * {@link CharSequenceTokenizerSource} for strings. It is a shortcut for:
41  *<block><pre>
42  * String myData = "...";
43  * TokenizerSource source = new ReaderSource(new StringReader(myData));
44  *</pre></block>
45  * The class also provides a faster access to the data in a string through the
46  * methods of the {@link java.lang.CharSequence} interface. Since this interface
47  * was only introduced with Java 1.4, this class can only be used with 1.4 or
48  * higher Java versions.
49  *
50  * @see TokenizerSource
51  * @see CharSequenceTokenizerSource
52  * @see CharArraySource
53  * @author Heiko Blau
54  */

55 public class StringSource implements CharSequenceTokenizerSource {
56   
57   //---------------------------------------------------------------------------
58
// Constructors
59
//
60

61   /**
62    * Constructing a <code>StringSource</code> on the given {@link java.lang.String}.
63    * A <code>null</code> value is handled like an empty string.
64    *
65    * @param data the string
66    */

67   public StringSource(String JavaDoc data) {
68     _data = data;
69   }
70   
71
72   //---------------------------------------------------------------------------
73
// Methods of the TokenizerSource interface
74
//
75

76   /**
77    * This method copies the available data into the given buffer according to
78    * the given offset and maximum character count. See {@link TokenizerSource#read}
79    * for details.
80    *
81    * @param cbuf buffer to receive data
82    * @param offset position from where the data should be inserted in <code>cbuf</code>
83    * @param maxChars maximum number of characters to be read into <code>cbuf</code>
84    * @return actually read characters or -1 on an end-of-file condition
85    */

86   public int read(char[] cbuf, final int offset, final int maxChars) throws Exception JavaDoc {
87     int length = (_data != null) ? _data.length() : 0;
88     int left = Math.min(length - _readOffset, maxChars);
89       
90     if (left > 0) {
91       _data.getChars(_readOffset, _readOffset + left, cbuf, offset);
92       _readOffset += left;
93       return left;
94     } else {
95       return -1;
96     }
97   }
98
99   //---------------------------------------------------------------------------
100
// Methods of the CharSequence interface
101
//
102

103   /**
104    * Implements {@link java.lang.CharSequence#charAt} for this class.
105    *
106    * @param index which character to retrieve
107    * @return the character at the given index
108    */

109   public char charAt(int index) {
110     return _data.charAt(index);
111   }
112
113   /**
114    * Implements {@link java.lang.CharSequence#length} for this class.
115    *
116    * @return the number of available characters
117    */

118   public int length() {
119     return (_data != null) ? _data.length() : 0;
120   }
121   
122   /**
123    * Implements {@link java.lang.CharSequence#subSequence} for this class.
124    *
125    * @param start the new <code>CharSequence</code> contains the characters
126    * from and including this position
127    * @param end the new <code>CharSequence</code> contains the characters
128    * up to and excluding this position
129    * @return a part of this <code>CharSequence</code>
130    */

131   public CharSequence JavaDoc subSequence(int start, int end) {
132     return _data.subSequence(start, end);
133   }
134
135   
136   //---------------------------------------------------------------------------
137
// Members
138
//
139
private String JavaDoc _data = null;
140   private int _readOffset = 0;
141 }
142
Popular Tags