1
2
3
4
5 package com.ozacc.mail.fetch.impl.sk_jp.util;
6
7 import java.util.*;
8
9 /***
10 * StringValues.
11 * <p>
12 * 複数の文字列をカンマやタブ区切りなどの一つの文字列として管理可能とします。
13 * <br>内部的にはListに入れますのでindexによるアクセスも可能ですが、
14 * 構築時、及びgetString()時に区切り文字で一本にされた文字列として
15 * やりとりすることもできます。
16 * エスケープ処理がされないので、デリミタを含むトークンを認識できません。
17 * </p>
18 * @version $Revision: 1.1.2.1 $ $Date: 2005/01/18 07:20:49 $
19 * @author Shin
20 */
21 public class StringValues {
22 private List src_ = new ArrayList();
23 /***
24 * 複数文字列管理オブジェクトを生成します。
25 */
26 public StringValues() {}
27 /***
28 * 複数文字列管理オブジェクトを生成します。
29 * @param str 区切り文字で連結された文字列
30 */
31 public StringValues(String str) {
32 parse(str);
33 }
34 /***
35 * 複数文字列管理オブジェクトを生成します。
36 * @param str 区切り文字で連結された文字列
37 * @param delim デリミタ
38 */
39 public StringValues(String str, String delim) {
40 parse(str, delim);
41 }
42 /***
43 * 複数文字列管理オブジェクトを生成します。
44 * @param strings 文字列の配列
45 */
46 public StringValues(String[] strings) {
47 add(strings);
48 }
49 /***
50 * 複数文字列管理オブジェクトを生成します。
51 * @param strings 文字列の配列
52 */
53 public StringValues(Object[] o) {
54 for (int i = 0; i < o.length; i++) {
55 add(o[i].toString());
56 }
57 }
58
59 /***
60 * デリミタで区切られた文字列を分割して追加します。
61 * <p>
62 * デリミタはStringTokenizerの標準のデリミタ
63 * <code>"\t\n\r\f"</code>が使われます。
64 * </p>
65 * @param str 区切り文字で連結された文字列
66 * @param delim デリミタ
67 */
68 public void parse(String str) {
69 StringTokenizer st = new StringTokenizer(str);
70 parse(st);
71 }
72 /***
73 * デリミタで区切られた文字列を分割して追加します。
74 * <p>
75 * </p>
76 * @param str 区切り文字で連結された文字列
77 * @param delim デリミタ
78 */
79 public void parse(String str, String delim) {
80 StringTokenizer st = new StringTokenizer(str, delim);
81 parse(st);
82 }
83 private void parse(StringTokenizer st) {
84 while (st.hasMoreTokens()) {
85 add(st.nextToken());
86 }
87 }
88 /***
89 * 文字列群へのイテレータを返します。
90 * @return Iteratorオブジェクト
91 */
92 public Iterator iterator() {
93 return src_.iterator();
94 }
95
96 /***
97 * カンマ区切り文字列を得ます。
98 * <p>
99 * 区切り文字列は文字列同士の間に単純に挿入されます。
100 * </p>
101 * @return 文字列化したオブジェクト
102 */
103 public String getString() {
104 return getString(", ");
105 }
106 /***
107 * 指定した区切り文字で連結された文字列を得ます。
108 * <p>
109 * 区切り文字列は文字列同士の間に単純に挿入されます。
110 * </p>
111 * @param delim 区切り文字列
112 * @return 文字列化したオブジェクト
113 */
114 public String getString(String delim) {
115 StringBuffer buf = new StringBuffer();
116 Iterator iterator = iterator();
117 if (iterator.hasNext()) {
118 buf.append(iterator.next());
119 }
120 while (iterator.hasNext()) {
121 buf.append(delim).append(iterator.next());
122 }
123 return new String(buf);
124 }
125 public String toString() {
126 return getString();
127 }
128 /***
129 * 指定indexの文字列を取得します。
130 * @param index 文字列群中の位置
131 */
132 public String get(int index) {
133 return (String)src_.get(index);
134 }
135 /***
136 * 文字列を追加します。
137 * @param str 追加する文字列
138 */
139 public void add(String str) {
140 src_.add(str);
141 }
142 /***
143 * 文字列群を追加します。
144 * @param str 追加する文字列
145 */
146 public void add(String[] str) {
147 for (int i = 0; i < str.length; i++) {
148 src_.add(str[i]);
149 }
150 }
151 /***
152 * 管理している文字列を削除します。
153 */
154 public void clear() {
155 src_.clear();
156 }
157 }