Still, is CR (only) a real issue or not? I don't think it is possible
to run any remotely recent java or Git on that old Macs.

If so, only one replace would do the job more efficiently. After all
this is a utility that may be called from anywhere. I'm not sure having constants for CRLF helps readbility here,

s.replaceAll("\r\n?","\n"); // replace any CRLFs or CRs

I'd prefer the one blow because if someone actually do get CR only, into their messages I'd like to know and understand. Fixing
hypotetical errors are often a source of unnecessary bugs, hard-to-maintain code and bad performance.

s.replaceAll("\r\n","\n"); // replace any CRLFs