hg: lambda/lambda/jdk: Pattern.splitAsStream.

Jürgen Kreileder jk at blackdown.de
Mon Apr 8 09:59:05 PDT 2013


Hi Paul,

it would be nice if Pattern/Matcher offered a terse way to loop over all
matches in a string and replace them via a callback.

E.g. I'm currently using something like this:

private static final PatternAndReplacement PASS2 = new PatternAndReplacement(
        Pattern.compile("  ( "
                        + "   \\A \\p{Punct}*"         // start of title…
                        + " |"
                        + "   [:.;?!]\\ +"             // or of subsentence…
                        + " | "
                        + "   \\  ['\"“‘(\\[] \\ *"    // or of inserted subphrase…
                        + ")"
                        + "(" + SMALL_WORDS + ") \\b", // … followed by small word
                        Pattern.COMMENTS | Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CHARACTER_CLASS),
        m -> Matcher.quoteReplacement(m.group(1) + capitalize(m.group(2))));

with PatternAndReplacement being

private static class PatternReplacement implements Function<String, String> {
    private final Pattern pattern;
    private final Function<MatchResult, String> function;

    PatternReplacement(final Pattern p, final Function<MatchResult, String> f) {
        pattern = p;
        function = f;
    }

    @Override
    public final String apply(final String s) {
        Matcher m = pattern.matcher(s);
        if (m.find()) {
            StringBuffer sb = new StringBuffer(s.length());
            do {
                m.appendReplacement(sb, function.apply(m));
            } while (m.find());
            return m.appendTail(sb).toString();
        }
        return s;
    }
}

Any plans for something like this?


Jürgen


paul.sandoz at oracle.com writes:

> Changeset: 526131346981
> Author:    psandoz
> Date:      2013-04-08 17:16 +0200
> URL:       http://hg.openjdk.java.net/lambda/lambda/jdk/rev/526131346981
>
> Pattern.splitAsStream.
> Contributed-by: Ben Evans <benjamin.john.evans at gmail.com>
>
> ! src/share/classes/java/util/regex/Pattern.java
> + test-ng/tests/org/openjdk/tests/java/util/regex/PatternTest.java


More information about the lambda-dev mailing list