1. The Clojure wrapper put the last two calls inside the if, unlike
Matcher#replaceFirst(), thus the nil.
public String replaceFirst(String replacement) {
if (replacement == null)
throw new NullPointerException("replacement");
StringBuffer sb = new StringBuffer();
reset();
if (find())
appendReplacement(sb, replacement);
appendTail(sb);
return sb.toString();
}
(defn- replace-first-by
[^CharSequence s ^Pattern re f]
(let [m (re-matcher re s)]
(let [buffer (StringBuffer. (.length s))]
(if (.find m)
(let [rep (f (re-groups m))]
(.appendReplacement m buffer rep)
(.appendTail m buffer)
(str buffer))))))
On Mar 10, 4:39 pm, Takahiro Hozumi <[email protected]> wrote:
> Hi,
> I have two questions about clojure.string/replace-first.
>
> 1.
> Is this expected behavior of replace-first?
>
> (require '[clojure.string :as str])
> (str/replace-first "abc def" #"ghi" (fn [a] (str a a)))
> => nil
>
> I don't think so, because string / string argument version returns
> original string when mismatched.
> (str/replace-first "abc def" "ghi" "jkl")
> => "abc def"
>
> 2.
> Is it difficult that replace-first support argument of string /
> function besides regex / function (i.e. without using Pattern/quote)?
>
> (str/replace-first "abc def" "def" (fn [a] (str a a)))
> => "abc defdef"
>
> The reason why I'd like to avoid using Pattern/quote is that ,I think,
> to replace string with string should be more lightweight than with
> regex.
>
> Thanks.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en