Quellcode durchsuchen

add ability to prefix replacement with matched text

tags/2.0.1
Jonathan Cobb vor 4 Jahren
Ursprung
Commit
565b0e251a
2 geänderte Dateien mit 23 neuen und 2 gelöschten Zeilen
  1. +11
    -2
      src/main/java/org/cobbzilla/util/io/regex/RegexReplacementFilter.java
  2. +12
    -0
      src/test/java/org/cobbzilla/util/io/regex/RegexFilterReaderTest.java

+ 11
- 2
src/main/java/org/cobbzilla/util/io/regex/RegexReplacementFilter.java Datei anzeigen

@@ -11,9 +11,12 @@ import java.util.regex.Pattern;
@NoArgsConstructor
public class RegexReplacementFilter implements RegexStreamFilter {

public static final String DEFAULT_PREFIX_REPLACEMENT_WITH_MATCH = "!";

@Getter @Setter private Pattern pattern;
@Getter @Setter private int group;
@Getter @Setter private String replacement;
@Getter @Setter private String prefixReplacementWithMatch = DEFAULT_PREFIX_REPLACEMENT_WITH_MATCH;

public RegexReplacementFilter(String regex, int group, String replacement) {
this.pattern = Pattern.compile(regex);
@@ -45,8 +48,14 @@ public class RegexReplacementFilter implements RegexStreamFilter {
// add everything before the group match
result.append(buffer.subSequence(matcher.start(), matcher.start(group)));

// add the replacement
result.append(replacement);
// if the replacement starts with the special prefixReplacementWithMatch, insert the match before the replacement
if (replacement.startsWith(prefixReplacementWithMatch)) {
result.append(buffer.subSequence(matcher.start(group), matcher.end(group)));
result.append(replacement.substring(prefixReplacementWithMatch.length()));
} else {
// add the replacement
result.append(replacement);
}

// add everything after the group match
result.append(buffer.subSequence(matcher.end(group), matcher.end()));


+ 12
- 0
src/test/java/org/cobbzilla/util/io/regex/RegexFilterReaderTest.java Datei anzeigen

@@ -38,6 +38,18 @@ public class RegexFilterReaderTest {
assertEquals("multi reader failed to get expected output", EXPECTED_STRING, result.toString());
}

public static final String TEST_STRING_INCLUDE_MATCH = "<!DOCTYPE html>\n<html dir=\"ltr\" lang=\"en\">\n<meta charset=\"utf-8\">something</html>\n";
public static final String EXPECTED_STRING_INCLUDE_MATCH = "<!DOCTYPE html>\n<html dir=\"ltr\" lang=\"en\">INSERTED_DATA\n<meta charset=\"utf-8\">something</html>\n";

@Test public void testRegexReaderIncludeMatch() throws Exception {
final Reader reader = new StringReader(TEST_STRING_INCLUDE_MATCH);
final RegexStreamFilter regexStreamFilter = new RegexReplacementFilter("<html\\s+[^>]*>", "!INSERTED_DATA");
final RegexFilterReader regexFilterReader = new RegexFilterReader(reader, 1024, regexStreamFilter);
final StringWriter result = new StringWriter();
IOUtils.copyLarge(regexFilterReader, result);
assertEquals("multi reader failed to get expected output", EXPECTED_STRING_INCLUDE_MATCH, result.toString());
}

public static final String MULTI_TEST_STRING_1 = "this is a multi-stream test string\nthat should has a lot of stuff";
public static final String MULTI_TEST_STRING_2 = "in it but why should that matter?\nit is a bad thing to have multiple streams?";
public static final String MULTI_TEST_STRING_3 = "maybe some people think so\nbut a good person would never say that";


Laden…
Abbrechen
Speichern