1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.lang3;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertNull;
21 import static org.junit.jupiter.api.Assertions.assertSame;
22
23 import org.junit.jupiter.api.Test;
24
25
26
27
28 public class StringUtilsSubstringTest extends AbstractLangTest {
29 private static final String FOO = "foo";
30 private static final String BAR = "bar";
31 private static final String BAZ = "baz";
32 private static final String FOOBAR = "foobar";
33 private static final String SENTENCE = "foo bar baz";
34
35
36 @Test
37 public void testCountMatches_char() {
38 assertEquals(0, StringUtils.countMatches(null, 'D'));
39 assertEquals(5, StringUtils.countMatches("one long someone sentence of one", ' '));
40 assertEquals(6, StringUtils.countMatches("one long someone sentence of one", 'o'));
41 assertEquals(4, StringUtils.countMatches("oooooooooooo", "ooo"));
42 }
43
44 @Test
45 public void testCountMatches_String() {
46 assertEquals(0, StringUtils.countMatches(null, null));
47 assertEquals(0, StringUtils.countMatches("blah", null));
48 assertEquals(0, StringUtils.countMatches(null, "DD"));
49
50 assertEquals(0, StringUtils.countMatches("x", ""));
51 assertEquals(0, StringUtils.countMatches("", ""));
52
53 assertEquals(3,
54 StringUtils.countMatches("one long someone sentence of one", "one"));
55 assertEquals(0,
56 StringUtils.countMatches("one long someone sentence of one", "two"));
57 assertEquals(4,
58 StringUtils.countMatches("oooooooooooo", "ooo"));
59 assertEquals(0, StringUtils.countMatches(null, "?"));
60 assertEquals(0, StringUtils.countMatches("", "?"));
61 assertEquals(0, StringUtils.countMatches("abba", null));
62 assertEquals(0, StringUtils.countMatches("abba", ""));
63 assertEquals(2, StringUtils.countMatches("abba", "a"));
64 assertEquals(1, StringUtils.countMatches("abba", "ab"));
65 assertEquals(0, StringUtils.countMatches("abba", "xxx"));
66 assertEquals(1, StringUtils.countMatches("ababa", "aba"));
67 }
68
69 @Test
70 public void testLeft_String() {
71 assertSame(null, StringUtils.left(null, -1));
72 assertSame(null, StringUtils.left(null, 0));
73 assertSame(null, StringUtils.left(null, 2));
74
75 assertEquals("", StringUtils.left("", -1));
76 assertEquals("", StringUtils.left("", 0));
77 assertEquals("", StringUtils.left("", 2));
78
79 assertEquals("", StringUtils.left(FOOBAR, -1));
80 assertEquals("", StringUtils.left(FOOBAR, 0));
81 assertEquals(FOO, StringUtils.left(FOOBAR, 3));
82 assertSame(FOOBAR, StringUtils.left(FOOBAR, 80));
83 }
84
85 @Test
86 public void testMid_String() {
87 assertSame(null, StringUtils.mid(null, -1, 0));
88 assertSame(null, StringUtils.mid(null, 0, -1));
89 assertSame(null, StringUtils.mid(null, 3, 0));
90 assertSame(null, StringUtils.mid(null, 3, 2));
91
92 assertEquals("", StringUtils.mid("", 0, -1));
93 assertEquals("", StringUtils.mid("", 0, 0));
94 assertEquals("", StringUtils.mid("", 0, 2));
95
96 assertEquals("", StringUtils.mid(FOOBAR, 3, -1));
97 assertEquals("", StringUtils.mid(FOOBAR, 3, 0));
98 assertEquals("b", StringUtils.mid(FOOBAR, 3, 1));
99 assertEquals(FOO, StringUtils.mid(FOOBAR, 0, 3));
100 assertEquals(BAR, StringUtils.mid(FOOBAR, 3, 3));
101 assertEquals(FOOBAR, StringUtils.mid(FOOBAR, 0, 80));
102 assertEquals(BAR, StringUtils.mid(FOOBAR, 3, 80));
103 assertEquals("", StringUtils.mid(FOOBAR, 9, 3));
104 assertEquals(FOO, StringUtils.mid(FOOBAR, -1, 3));
105 }
106
107 @Test
108 public void testRight_String() {
109 assertSame(null, StringUtils.right(null, -1));
110 assertSame(null, StringUtils.right(null, 0));
111 assertSame(null, StringUtils.right(null, 2));
112
113 assertEquals("", StringUtils.right("", -1));
114 assertEquals("", StringUtils.right("", 0));
115 assertEquals("", StringUtils.right("", 2));
116
117 assertEquals("", StringUtils.right(FOOBAR, -1));
118 assertEquals("", StringUtils.right(FOOBAR, 0));
119 assertEquals(BAR, StringUtils.right(FOOBAR, 3));
120 assertSame(FOOBAR, StringUtils.right(FOOBAR, 80));
121 }
122
123 @Test
124 public void testSubstring_StringInt() {
125 assertNull(StringUtils.substring(null, 0));
126 assertEquals("", StringUtils.substring("", 0));
127 assertEquals("", StringUtils.substring("", 2));
128
129 assertEquals("", StringUtils.substring(SENTENCE, 80));
130 assertEquals(BAZ, StringUtils.substring(SENTENCE, 8));
131 assertEquals(BAZ, StringUtils.substring(SENTENCE, -3));
132 assertEquals(SENTENCE, StringUtils.substring(SENTENCE, 0));
133 assertEquals("abc", StringUtils.substring("abc", -4));
134 assertEquals("abc", StringUtils.substring("abc", -3));
135 assertEquals("bc", StringUtils.substring("abc", -2));
136 assertEquals("c", StringUtils.substring("abc", -1));
137 assertEquals("abc", StringUtils.substring("abc", 0));
138 assertEquals("bc", StringUtils.substring("abc", 1));
139 assertEquals("c", StringUtils.substring("abc", 2));
140 assertEquals("", StringUtils.substring("abc", 3));
141 assertEquals("", StringUtils.substring("abc", 4));
142 }
143
144 @Test
145 public void testSubstring_StringIntInt() {
146 assertNull(StringUtils.substring(null, 0, 0));
147 assertNull(StringUtils.substring(null, 1, 2));
148 assertEquals("", StringUtils.substring("", 0, 0));
149 assertEquals("", StringUtils.substring("", 1, 2));
150 assertEquals("", StringUtils.substring("", -2, -1));
151
152 assertEquals("", StringUtils.substring(SENTENCE, 8, 6));
153 assertEquals(FOO, StringUtils.substring(SENTENCE, 0, 3));
154 assertEquals("o", StringUtils.substring(SENTENCE, -9, 3));
155 assertEquals(FOO, StringUtils.substring(SENTENCE, 0, -8));
156 assertEquals("o", StringUtils.substring(SENTENCE, -9, -8));
157 assertEquals(SENTENCE, StringUtils.substring(SENTENCE, 0, 80));
158 assertEquals("", StringUtils.substring(SENTENCE, 2, 2));
159 assertEquals("b", StringUtils.substring("abc", -2, -1));
160 }
161
162 @Test
163 public void testSubstringAfter_StringInt() {
164 assertNull(StringUtils.substringAfter(null, 0));
165 assertNull(StringUtils.substringAfter(null, 'X'));
166 assertEquals("", StringUtils.substringAfter("", 0));
167 assertEquals("", StringUtils.substringAfter("", 'X'));
168
169 assertEquals("", StringUtils.substringAfter("foo", 0));
170 assertEquals("ot", StringUtils.substringAfter("foot", 'o'));
171 assertEquals("bc", StringUtils.substringAfter("abc", 'a'));
172 assertEquals("cba", StringUtils.substringAfter("abcba", 'b'));
173 assertEquals("", StringUtils.substringAfter("abc", 'c'));
174 assertEquals("", StringUtils.substringAfter("abc", 'd'));
175 }
176
177 @Test
178 public void testSubstringAfter_StringString() {
179 assertEquals("barXXbaz", StringUtils.substringAfter("fooXXbarXXbaz", "XX"));
180
181 assertNull(StringUtils.substringAfter(null, null));
182 assertNull(StringUtils.substringAfter(null, ""));
183 assertNull(StringUtils.substringAfter(null, "XX"));
184 assertEquals("", StringUtils.substringAfter("", null));
185 assertEquals("", StringUtils.substringAfter("", ""));
186 assertEquals("", StringUtils.substringAfter("", "XX"));
187
188 assertEquals("", StringUtils.substringAfter("foo", null));
189 assertEquals("ot", StringUtils.substringAfter("foot", "o"));
190 assertEquals("bc", StringUtils.substringAfter("abc", "a"));
191 assertEquals("cba", StringUtils.substringAfter("abcba", "b"));
192 assertEquals("", StringUtils.substringAfter("abc", "c"));
193 assertEquals("abc", StringUtils.substringAfter("abc", ""));
194 assertEquals("", StringUtils.substringAfter("abc", "d"));
195 }
196
197 @Test
198 public void testSubstringAfterLast_StringInt() {
199 assertNull(StringUtils.substringAfterLast(null, 0));
200 assertNull(StringUtils.substringAfterLast(null, 'X'));
201 assertEquals("", StringUtils.substringAfterLast("", 0));
202 assertEquals("", StringUtils.substringAfterLast("", 'a'));
203
204 assertEquals("", StringUtils.substringAfterLast("foo", 0));
205 assertEquals("", StringUtils.substringAfterLast("foo", 'b'));
206 assertEquals("t", StringUtils.substringAfterLast("foot", 'o'));
207 assertEquals("bc", StringUtils.substringAfterLast("abc", 'a'));
208 assertEquals("a", StringUtils.substringAfterLast("abcba", 'b'));
209 assertEquals("", StringUtils.substringAfterLast("abc", 'c'));
210 assertEquals("", StringUtils.substringAfterLast("", 'd'));
211 }
212
213 @Test
214 public void testSubstringAfterLast_StringString() {
215 assertEquals("baz", StringUtils.substringAfterLast("fooXXbarXXbaz", "XX"));
216
217 assertNull(StringUtils.substringAfterLast(null, null));
218 assertNull(StringUtils.substringAfterLast(null, ""));
219 assertNull(StringUtils.substringAfterLast(null, "XX"));
220 assertEquals("", StringUtils.substringAfterLast("", null));
221 assertEquals("", StringUtils.substringAfterLast("", ""));
222 assertEquals("", StringUtils.substringAfterLast("", "a"));
223
224 assertEquals("", StringUtils.substringAfterLast("foo", null));
225 assertEquals("", StringUtils.substringAfterLast("foo", "b"));
226 assertEquals("t", StringUtils.substringAfterLast("foot", "o"));
227 assertEquals("bc", StringUtils.substringAfterLast("abc", "a"));
228 assertEquals("a", StringUtils.substringAfterLast("abcba", "b"));
229 assertEquals("", StringUtils.substringAfterLast("abc", "c"));
230 assertEquals("", StringUtils.substringAfterLast("", "d"));
231 assertEquals("", StringUtils.substringAfterLast("abc", ""));
232 }
233
234 @Test
235 public void testSubstringBefore_StringInt() {
236 assertEquals("foo", StringUtils.substringBefore("fooXXbarXXbaz", 'X'));
237
238 assertNull(StringUtils.substringBefore(null, 0));
239 assertNull(StringUtils.substringBefore(null, 'X'));
240 assertEquals("", StringUtils.substringBefore("", 0));
241 assertEquals("", StringUtils.substringBefore("", 'X'));
242
243 assertEquals("foo", StringUtils.substringBefore("foo", 0));
244 assertEquals("foo", StringUtils.substringBefore("foo", 'b'));
245 assertEquals("f", StringUtils.substringBefore("foot", 'o'));
246 assertEquals("", StringUtils.substringBefore("abc", 'a'));
247 assertEquals("a", StringUtils.substringBefore("abcba", 'b'));
248 assertEquals("ab", StringUtils.substringBefore("abc", 'c'));
249 assertEquals("abc", StringUtils.substringBefore("abc", 0));
250 }
251
252 @Test
253 public void testSubstringBefore_StringString() {
254 assertEquals("foo", StringUtils.substringBefore("fooXXbarXXbaz", "XX"));
255
256 assertNull(StringUtils.substringBefore(null, null));
257 assertNull(StringUtils.substringBefore(null, ""));
258 assertNull(StringUtils.substringBefore(null, "XX"));
259 assertEquals("", StringUtils.substringBefore("", null));
260 assertEquals("", StringUtils.substringBefore("", ""));
261 assertEquals("", StringUtils.substringBefore("", "XX"));
262
263 assertEquals("foo", StringUtils.substringBefore("foo", null));
264 assertEquals("foo", StringUtils.substringBefore("foo", "b"));
265 assertEquals("f", StringUtils.substringBefore("foot", "o"));
266 assertEquals("", StringUtils.substringBefore("abc", "a"));
267 assertEquals("a", StringUtils.substringBefore("abcba", "b"));
268 assertEquals("ab", StringUtils.substringBefore("abc", "c"));
269 assertEquals("", StringUtils.substringBefore("abc", ""));
270 assertEquals("abc", StringUtils.substringBefore("abc", "X"));
271 }
272
273 @Test
274 public void testSubstringBeforeLast_StringString() {
275 assertEquals("fooXXbar", StringUtils.substringBeforeLast("fooXXbarXXbaz", "XX"));
276
277 assertNull(StringUtils.substringBeforeLast(null, null));
278 assertNull(StringUtils.substringBeforeLast(null, ""));
279 assertNull(StringUtils.substringBeforeLast(null, "XX"));
280 assertEquals("", StringUtils.substringBeforeLast("", null));
281 assertEquals("", StringUtils.substringBeforeLast("", ""));
282 assertEquals("", StringUtils.substringBeforeLast("", "XX"));
283
284 assertEquals("foo", StringUtils.substringBeforeLast("foo", null));
285 assertEquals("foo", StringUtils.substringBeforeLast("foo", "b"));
286 assertEquals("fo", StringUtils.substringBeforeLast("foo", "o"));
287 assertEquals("abc\r\n", StringUtils.substringBeforeLast("abc\r\n", "d"));
288 assertEquals("abc", StringUtils.substringBeforeLast("abcdabc", "d"));
289 assertEquals("abcdabc", StringUtils.substringBeforeLast("abcdabcd", "d"));
290 assertEquals("a", StringUtils.substringBeforeLast("abc", "b"));
291 assertEquals("abc ", StringUtils.substringBeforeLast("abc \n", "\n"));
292 assertEquals("a", StringUtils.substringBeforeLast("a", null));
293 assertEquals("a", StringUtils.substringBeforeLast("a", ""));
294 assertEquals("", StringUtils.substringBeforeLast("a", "a"));
295 }
296
297 @Test
298 public void testSubstringBetween_StringString() {
299 assertNull(StringUtils.substringBetween(null, "tag"));
300 assertEquals("", StringUtils.substringBetween("", ""));
301 assertNull(StringUtils.substringBetween("", "abc"));
302 assertEquals("", StringUtils.substringBetween(" ", " "));
303 assertNull(StringUtils.substringBetween("abc", null));
304 assertEquals("", StringUtils.substringBetween("abc", ""));
305 assertNull(StringUtils.substringBetween("abc", "a"));
306 assertEquals("bc", StringUtils.substringBetween("abca", "a"));
307 assertEquals("bc", StringUtils.substringBetween("abcabca", "a"));
308 assertEquals("bar", StringUtils.substringBetween("\nbar\n", "\n"));
309 }
310
311 @Test
312 public void testSubstringBetween_StringStringString() {
313 assertNull(StringUtils.substringBetween(null, "", ""));
314 assertNull(StringUtils.substringBetween("", null, ""));
315 assertNull(StringUtils.substringBetween("", "", null));
316 assertEquals("", StringUtils.substringBetween("", "", ""));
317 assertEquals("", StringUtils.substringBetween("foo", "", ""));
318 assertNull(StringUtils.substringBetween("foo", "", "]"));
319 assertNull(StringUtils.substringBetween("foo", "[", "]"));
320 assertEquals("", StringUtils.substringBetween(" ", " ", " "));
321 assertEquals("bar", StringUtils.substringBetween("<foo>bar</foo>", "<foo>", "</foo>") );
322 assertEquals("abc", StringUtils.substringBetween("yabczyabcz", "y", "z"));
323 }
324
325
326
327
328 @Test
329 public void testSubstringsBetween_StringStringString() {
330
331 String[] results = StringUtils.substringsBetween("[one], [two], [three]", "[", "]");
332 assertEquals(3, results.length);
333 assertEquals("one", results[0]);
334 assertEquals("two", results[1]);
335 assertEquals("three", results[2]);
336
337 results = StringUtils.substringsBetween("[one], [two], three", "[", "]");
338 assertEquals(2, results.length);
339 assertEquals("one", results[0]);
340 assertEquals("two", results[1]);
341
342 results = StringUtils.substringsBetween("[one], [two], three]", "[", "]");
343 assertEquals(2, results.length);
344 assertEquals("one", results[0]);
345 assertEquals("two", results[1]);
346
347 results = StringUtils.substringsBetween("[one], two], three]", "[", "]");
348 assertEquals(1, results.length);
349 assertEquals("one", results[0]);
350
351 results = StringUtils.substringsBetween("one], two], [three]", "[", "]");
352 assertEquals(1, results.length);
353 assertEquals("three", results[0]);
354
355
356
357 results = StringUtils.substringsBetween("aabhellobabnonba", "ab", "ba");
358 assertEquals(1, results.length);
359 assertEquals("hello", results[0]);
360
361 results = StringUtils.substringsBetween("one, two, three", "[", "]");
362 assertNull(results);
363
364 results = StringUtils.substringsBetween("[one, two, three", "[", "]");
365 assertNull(results);
366
367 results = StringUtils.substringsBetween("one, two, three]", "[", "]");
368 assertNull(results);
369
370 results = StringUtils.substringsBetween("[one], [two], [three]", "[", null);
371 assertNull(results);
372
373 results = StringUtils.substringsBetween("[one], [two], [three]", null, "]");
374 assertNull(results);
375
376 results = StringUtils.substringsBetween("[one], [two], [three]", "", "");
377 assertNull(results);
378
379 results = StringUtils.substringsBetween(null, "[", "]");
380 assertNull(results);
381
382 results = StringUtils.substringsBetween("", "[", "]");
383 assertEquals(0, results.length);
384 }
385
386 }