1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.text.matcher;
19
20 import org.apache.commons.lang3.ArrayUtils;
21 import org.apache.commons.lang3.StringUtils;
22
23
24
25
26
27
28 public final class StringMatcherFactory {
29
30
31
32
33 private static final AbstractStringMatcher.CharMatcher COMMA_MATCHER = new AbstractStringMatcher.CharMatcher(',');
34
35
36
37
38 private static final AbstractStringMatcher.CharMatcher DOUBLE_QUOTE_MATCHER = new AbstractStringMatcher.CharMatcher(
39 '"');
40
41
42
43
44 public static final StringMatcherFactory INSTANCE = new StringMatcherFactory();
45
46
47
48
49 private static final AbstractStringMatcher.NoneMatcher NONE_MATCHER = new AbstractStringMatcher.NoneMatcher();
50
51
52
53
54 private static final AbstractStringMatcher.CharSetMatcher QUOTE_MATCHER = new AbstractStringMatcher.CharSetMatcher(
55 "'\"".toCharArray());
56
57
58
59
60 private static final AbstractStringMatcher.CharMatcher SINGLE_QUOTE_MATCHER = new AbstractStringMatcher.CharMatcher(
61 '\'');
62
63
64
65
66 private static final AbstractStringMatcher.CharMatcher SPACE_MATCHER = new AbstractStringMatcher.CharMatcher(' ');
67
68
69
70
71 private static final AbstractStringMatcher.CharSetMatcher SPLIT_MATCHER = new AbstractStringMatcher.CharSetMatcher(
72 " \t\n\r\f".toCharArray());
73
74
75
76
77 private static final AbstractStringMatcher.CharMatcher TAB_MATCHER = new AbstractStringMatcher.CharMatcher('\t');
78
79
80
81
82 private static final AbstractStringMatcher.TrimMatcher TRIM_MATCHER = new AbstractStringMatcher.TrimMatcher();
83
84
85
86
87 private StringMatcherFactory() {
88
89 }
90
91
92
93
94
95
96
97
98 public StringMatcher andMatcher(final StringMatcher... stringMatchers) {
99 final int len = ArrayUtils.getLength(stringMatchers);
100 if (len == 0) {
101 return NONE_MATCHER;
102 }
103 if (len == 1) {
104 return stringMatchers[0];
105 }
106 return new AbstractStringMatcher.AndStringMatcher(stringMatchers);
107 }
108
109
110
111
112
113
114
115 public StringMatcher charMatcher(final char ch) {
116 return new AbstractStringMatcher.CharMatcher(ch);
117 }
118
119
120
121
122
123
124
125 public StringMatcher charSetMatcher(final char... chars) {
126 final int len = ArrayUtils.getLength(chars);
127 if (len == 0) {
128 return NONE_MATCHER;
129 }
130 if (len == 1) {
131 return new AbstractStringMatcher.CharMatcher(chars[0]);
132 }
133 return new AbstractStringMatcher.CharSetMatcher(chars);
134 }
135
136
137
138
139
140
141
142 public StringMatcher charSetMatcher(final String chars) {
143 final int len = StringUtils.length(chars);
144 if (len == 0) {
145 return NONE_MATCHER;
146 }
147 if (len == 1) {
148 return new AbstractStringMatcher.CharMatcher(chars.charAt(0));
149 }
150 return new AbstractStringMatcher.CharSetMatcher(chars.toCharArray());
151 }
152
153
154
155
156
157
158 public StringMatcher commaMatcher() {
159 return COMMA_MATCHER;
160 }
161
162
163
164
165
166
167 public StringMatcher doubleQuoteMatcher() {
168 return DOUBLE_QUOTE_MATCHER;
169 }
170
171
172
173
174
175
176 public StringMatcher noneMatcher() {
177 return NONE_MATCHER;
178 }
179
180
181
182
183
184
185 public StringMatcher quoteMatcher() {
186 return QUOTE_MATCHER;
187 }
188
189
190
191
192
193
194 public StringMatcher singleQuoteMatcher() {
195 return SINGLE_QUOTE_MATCHER;
196 }
197
198
199
200
201
202
203 public StringMatcher spaceMatcher() {
204 return SPACE_MATCHER;
205 }
206
207
208
209
210
211
212 public StringMatcher splitMatcher() {
213 return SPLIT_MATCHER;
214 }
215
216
217
218
219
220
221
222
223 public StringMatcher stringMatcher(final char... chars) {
224 final int length = ArrayUtils.getLength(chars);
225 return length == 0 ? NONE_MATCHER
226 : length == 1 ? new AbstractStringMatcher.CharMatcher(chars[0])
227 : new AbstractStringMatcher.CharArrayMatcher(chars);
228 }
229
230
231
232
233
234
235
236 public StringMatcher stringMatcher(final String str) {
237 return StringUtils.isEmpty(str) ? NONE_MATCHER : stringMatcher(str.toCharArray());
238 }
239
240
241
242
243
244
245 public StringMatcher tabMatcher() {
246 return TAB_MATCHER;
247 }
248
249
250
251
252
253
254 public StringMatcher trimMatcher() {
255 return TRIM_MATCHER;
256 }
257
258 }