This logic doesn't feel right.  In particular the code for resetting the default match - what if addSeparator() is called twice, and something else was set to the default separator?

I would have exepcted either
i) requiring the caller to call addSeparator() whether or not it was overridden (possibly with an option to use the default value).
or 
ii) keeping track if it had been called, and applying a default if not (but that doesn't allow it to be omitted)