[indexes-of-matches] Get the Indexes of Regex Pattern Matches in Java (#14648)
This commit is contained in:
parent
f1cb122104
commit
ef5a4d2daa
@ -0,0 +1,75 @@
|
|||||||
|
package com.baeldung.regex.indexesofmatches;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class IndexesOfMatchesUnitTest {
|
||||||
|
private static final String INPUT = "This line contains <the first value>, <the second value>, and <the third value>.";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenUsingNorCharClass_thenGetExpectedTexts() {
|
||||||
|
Pattern pattern = Pattern.compile("<[^>]*>");
|
||||||
|
Matcher matcher = pattern.matcher(INPUT);
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
while (matcher.find()) {
|
||||||
|
result.add(matcher.group());
|
||||||
|
}
|
||||||
|
assertThat(result).containsExactly("<the first value>", "<the second value>", "<the third value>");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenCallingMatcherEnd_thenGetIndexesAfterTheMatchSequence() {
|
||||||
|
Pattern pattern = Pattern.compile("456");
|
||||||
|
Matcher matcher = pattern.matcher("0123456789");
|
||||||
|
String result = null;
|
||||||
|
int startIdx = -1;
|
||||||
|
int endIdx = -1;
|
||||||
|
if (matcher.find()) {
|
||||||
|
result = matcher.group();
|
||||||
|
startIdx = matcher.start();
|
||||||
|
endIdx = matcher.end();
|
||||||
|
}
|
||||||
|
assertThat(result).isEqualTo("456");
|
||||||
|
assertThat(startIdx).isEqualTo(4);
|
||||||
|
assertThat(endIdx).isEqualTo(7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenUsingMatcherStartAndEnd_thenGetIndexesOfMatches() {
|
||||||
|
Pattern pattern = Pattern.compile("<[^>]*>");
|
||||||
|
Matcher matcher = pattern.matcher(INPUT);
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
Map<Integer, Integer> indexesOfMatches = new LinkedHashMap<>();
|
||||||
|
while (matcher.find()) {
|
||||||
|
result.add(matcher.group());
|
||||||
|
indexesOfMatches.put(matcher.start(), matcher.end());
|
||||||
|
}
|
||||||
|
assertThat(result).containsExactly("<the first value>", "<the second value>", "<the third value>");
|
||||||
|
assertThat(indexesOfMatches.entrySet()).map(entry -> INPUT.substring(entry.getKey(), entry.getValue()))
|
||||||
|
.containsExactly("<the first value>", "<the second value>", "<the third value>");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenUsingMatcherStartAndEndWithGroupIdx_thenGetIndexesOfMatches() {
|
||||||
|
Pattern pattern = Pattern.compile("<([^>]*)>");
|
||||||
|
Matcher matcher = pattern.matcher(INPUT);
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
Map<Integer, Integer> indexesOfMatches = new LinkedHashMap<>();
|
||||||
|
while (matcher.find()) {
|
||||||
|
result.add(matcher.group(1));
|
||||||
|
indexesOfMatches.put(matcher.start(1), matcher.end(1));
|
||||||
|
}
|
||||||
|
assertThat(result).containsExactly("the first value", "the second value", "the third value");
|
||||||
|
|
||||||
|
assertThat(indexesOfMatches.entrySet()).map(entry -> INPUT.substring(entry.getKey(), entry.getValue()))
|
||||||
|
.containsExactly("the first value", "the second value", "the third value");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user