I'm not sure what's going on, but note that the documentation for replaceAll() tells us (if you follow the link to the Matcher class' method) that the replacement string is not treated literally, and backslashes have special meaning as escape characters - which is probalby not what you want. So you probably need to again double (that is, quadruple) each \ in your preplacement string literal, to get:
String APP_ROOT = "C:\\\\Documents and Settings\\\\SysOp\\\\My Documents\\\\AB LOGIC\\\\Eclipse Workspace\\\\abLogic\\\\web\\\\";
Strange, I know, but it should work. I bet it was the final \\ in the original string that caused the problem - the compiler translated that to a single \, and the regex parser saw that single \ and figured it was an escape for the following character. Except there was no following character, so it got confused.
Notice that the same is true for '$'. That's why I have written a method for escaping replace values, which goes something like (IIRC - the following is from memory, and therefore untested):
The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus