O argumento de String.replaceAll() pode ser uma expressao regular. $ eh um caractere reservado para expressao regulares, usado para se referir a grupos criados anterior mente na expressao (com parentes). Para evitar este problema, basta "escapar" o $ com uma barra invertida. Ou seja, tente