1 /* CharSubSequence.java
2 *
3 * Created on Sep 30, 2003
4 *
5 * Copyright (C) 2003 Internet Archive.
6 *
7 * This file is part of the Heritrix web crawler (crawler.archive.org).
8 *
9 * Heritrix is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser Public License as published by
11 * the Free Software Foundation; either version 2.1 of the License, or
12 * any later version.
13 *
14 * Heritrix is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Lesser Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser Public License
20 * along with Heritrix; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23 package org.archive.io;
24
25
26 /***
27 * Provides a subsequence view onto a CharSequence.
28 *
29 * @author gojomo
30 * @version $Revision: 3288 $, $Date: 2005-03-31 17:43:23 +0000 (Thu, 31 Mar 2005) $
31 */
32 public class CharSubSequence implements CharSequence {
33
34 CharSequence inner;
35 int start;
36 int end;
37
38 public CharSubSequence(CharSequence inner, int start, int end) {
39 if (end < start) {
40 throw new IllegalArgumentException("Start " + start + " is > " +
41 " than end " + end);
42 }
43
44 if (end < 0 || start < 0) {
45 throw new IllegalArgumentException("Start " + start + " or end " +
46 end + " is < 0.");
47 }
48
49 if (inner == null) {
50 throw new NullPointerException("Passed charsequence is null.");
51 }
52
53 this.inner = inner;
54 this.start = start;
55 this.end = end;
56 }
57
58 /*
59 * (non-Javadoc)
60 * @see java.lang.CharSequence#length()
61 */
62 public int length() {
63 return this.end - this.start;
64 }
65
66 /*
67 * (non-Javadoc)
68 * @see java.lang.CharSequence#charAt(int)
69 */
70 public char charAt(int index) {
71 return this.inner.charAt(this.start + index);
72 }
73
74 /*
75 * (non-Javadoc)
76 * @see java.lang.CharSequence#subSequence(int, int)
77 */
78 public CharSequence subSequence(int begin, int finish) {
79 return new CharSubSequence(this, begin, finish);
80 }
81
82 /*
83 * (non-Javadoc)
84 * @see java.lang.CharSequence#toString()
85 */
86 public String toString() {
87 StringBuffer sb = new StringBuffer(length());
88 // could use StringBuffer.append(CharSequence) if willing to do 1.5 & up
89 for (int i = 0;i<length();i++) {
90 sb.append(charAt(i));
91 }
92 return sb.toString();
93 }
94 }