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