Преглед изворни кода

allow insertion of match anywhere in the replacement

tags/2.0.1
Jonathan Cobb пре 4 година
родитељ
комит
2de884b2c1
2 измењених фајлова са 15 додато и 4 уклоњено
  1. +3
    -4
      src/main/java/org/cobbzilla/util/io/regex/RegexReplacementFilter.java
  2. +12
    -0
      src/test/java/org/cobbzilla/util/io/regex/RegexFilterReaderTest.java

+ 3
- 4
src/main/java/org/cobbzilla/util/io/regex/RegexReplacementFilter.java Прегледај датотеку

@@ -48,10 +48,9 @@ public class RegexReplacementFilter implements RegexStreamFilter {
// add everything before the group match
result.append(buffer.subSequence(matcher.start(), matcher.start(group)));

// 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()));
// if the replacement contains prefixReplacementWithMatch, replace with the match
if (replacement.contains(prefixReplacementWithMatch)) {
result.append(replacement.replace(prefixReplacementWithMatch, buffer.subSequence(matcher.start(group), matcher.end(group))));
} else {
// add the replacement
result.append(replacement);


+ 12
- 0
src/test/java/org/cobbzilla/util/io/regex/RegexFilterReaderTest.java Прегледај датотеку

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

public static final String TEST_STRING_INCLUDE_MATCH_MIDDLE = "<!DOCTYPE html>\n<html dir=\"ltr\" lang=\"en\">\n<meta charset=\"utf-8\">something</html>\n";
public static final String EXPECTED_STRING_INCLUDE_MATCH_MIDDLE = "<!DOCTYPE html>\nINSERTED_<html dir=\"ltr\" lang=\"en\">DATA\n<meta charset=\"utf-8\">something</html>\n";

@Test public void testRegexReaderIncludeMatchInMiddle() throws Exception {
final Reader reader = new StringReader(TEST_STRING_INCLUDE_MATCH_MIDDLE);
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_MIDDLE, 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";


Loading…
Откажи
Сачувај