I guess I started by writing an efficient replacement loop (only one StringBuilder, iterating over chars directly) which looks somewhat lopsided because it has only one special case. So no particular reason (except for probably still being faster)