Hello Loic, sounds good to me. Go for it.
Benedikt 2015-10-20 9:52 GMT+02:00 Loïc Guibert <[email protected]>: > Hello, > I proposed some time ago to add in StringUtils 2 null safe methods > to replace into a String with regular expression > and I'd like to hear opinions about that. > > I opened a JIRA ticket (LANG-1139) : > https://issues.apache.org/jira/browse/LANG-1139 > > and an associated Pull Request (#92) : > https://github.com/apache/commons-lang/pull/92 > > > Moreover, there is an existing method > (which add Pattern#DOTALL option by default) : > * StringUtils.replacePattern(String source, String regex, String > replacement) > that is not null safe. > > I think to modify it to follow the same behavior as the 2 new methods: > * StringUtils.replacePattern(null, *, *) = null > * StringUtils.replacePattern("any", null, *) = "any" > * StringUtils.replacePattern("any", *, null) = "any" > > This will impact this method : > * removePattern(String source, String regex) > as it calls "replacePattern(source, regex, StringUtils.EMPTY);" > and it'll become null safe to. > > In addition to the 2 new replace methods, > I could also add the pending remove methods : > > - String removeAll(String text, String regex); > - String removeFirst(String text, String regex); > > > If nobody objects, I'll go on and commit the proposed changes. > > > Loic Guibert > PGP : 0x65EB4F33 > > > Le 28/05/2015 16:42, Loic Guibert a écrit : > > Hello, > > I implemented 2 null safe methods to replace into a String with regular > > expression : > > - String replaceAll(String text, String regex, String replacement); > > - String replaceFirst(String text, String regex, String replacement); > > > > > > The StringUtils.replacePattern(String source, String regex, String > > replacement) method adds Pattern#DOTALL option by default which may be > > undesired. Moreover, this methods is not null safe. > > > > I think it could be added to StringUtils. > > I opened a JIRA ticket (LANG-1139) and an associated Pull Request (#92) > > > > > > There is detail : > > > > /** > > * <p>Replaces each substring of the text String that matches the given > > regular expression > > * with the given replacement.</p> > > * > > * This method is a {@code null} safe equivalent to: > > * <ul> > > * <li>{@code text.replaceAll(regex, replacement)}</li> > > * <li>{@code > > Pattern.compile(regex).matcher(text).replaceAll(replacement)}</li> > > * </ul> > > * > > * <p>A {@code null} reference passed to this method is a no-op.</p> > > * > > * <p>Unlike in the {@link #replacePattern(String, String, String)} > > method, the {@link Pattern#DOTALL} option > > * is NOT automatically added. > > * To use the DOTALL option prepend <code>"(?s)"</code> to the regex. > > * DOTALL is also know as single-line mode in Perl.</p> > > * > > * <pre> > > * StringUtils.replaceAll(null, *, *) = null > > * StringUtils.replaceAll("any", null, *) = "any" > > * StringUtils.replaceAll("any", *, null) = "any" > > * StringUtils.replaceAll("", "", "zzz") = "zzz" > > * StringUtils.replaceAll("", ".*", "zzz") = "zzz" > > * StringUtils.replaceAll("", ".+", "zzz") = "" > > * StringUtils.replaceAll("<__>\n<__>", "<.*>", "z") = "z\nz" > > * StringUtils.replaceAll("<__>\n<__>", "(?s)<.*>", "z") = "z" > > * StringUtils.replaceAll("ABCabc123", "[a-z]", "_") = "ABC___123" > > * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "_") = "ABC_123" > > * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "") = "ABC123" > > * StringUtils.replaceAll("Lorem ipsum dolor sit", "( +)([a-z]+)", > > "_$2") = "Lorem_ipsum_dolor_sit" > > * </pre> > > * > > * @param text text to search and replace in, may be null > > * @param regex the regular expression to which this string is to be > > matched > > * @param replacement the string to be substituted for each match > > * @return the text with any replacements processed, > > * {@code null} if null String input > > * > > * @throws PatternSyntaxException > > * if the regular expression's syntax is invalid > > * > > * @see String#replaceAll(String, String) > > * @see java.util.regex.Pattern > > * @see java.util.regex.Pattern#DOTALL > > */ > > public static String replaceAll(final String text, final String regex, > > final String replacement); > > > > /** > > * <p>Replaces the first substring of the text string that matches the > > given regular expression > > * with the given replacement.</p> > > * > > * This method is a {@code null} safe equivalent to: > > * <ul> > > * <li>{@code text.replaceFirst(regex, replacement)}</li> > > * <li>{@code > > Pattern.compile(regex).matcher(text).replaceFirst(replacement)}</li> > > * </ul> > > * > > * <p>A {@code null} reference passed to this method is a no-op.</p> > > * > > * <p>The {@link Pattern#DOTALL} option is NOT automatically added. > > * To use the DOTALL option prepend <code>"(?s)"</code> to the regex. > > * DOTALL is also know as single-line mode in Perl.</p> > > * > > * <pre> > > * StringUtils.replaceFirst(null, *, *) = null > > * StringUtils.replaceFirst("any", null, *) = "any" > > * StringUtils.replaceFirst("any", *, null) = "any" > > * StringUtils.replaceFirst("", "", "zzz") = "zzz" > > * StringUtils.replaceFirst("", ".*", "zzz") = "zzz" > > * StringUtils.replaceFirst("", ".+", "zzz") = "" > > * StringUtils.replaceFirst("<__>\n<__>", "<.*>", "z") = "z\n<__>" > > * StringUtils.replaceFirst("<__>\n<__>", "(?s)<.*>", "z") = "z" > > * StringUtils.replaceFirst("ABCabc123", "[a-z]", "_") = > > "ABC_bc123" > > * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "_") = > > "ABC_123abc" > > * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "") = > > "ABC123abc" > > * StringUtils.replaceFirst("Lorem ipsum dolor sit", "( +)([a-z]+)", > > "_$2") = "Lorem_ipsum dolor sit" > > * </pre> > > * > > * @param text text to search and replace in, may be null > > * @param regex the regular expression to which this string is to be > > matched > > * @param replacement the string to be substituted for the first match > > * @return the text with the first replacement processed, > > * {@code null} if null String input > > * > > * @throws PatternSyntaxException > > * if the regular expression's syntax is invalid > > * > > * @see String#replaceFirst(String, String) > > * @see java.util.regex.Pattern > > * @see java.util.regex.Pattern#DOTALL > > */ > > public static String replaceFirst(final String text, final String regex, > > final String replacement); > > > > > > Regards, > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter
