Во-первых, эта проблема не так проста, как кажется, поскольку разделитель тысяч не всегда является запятой и зависит от локали пользователя.В некоторых случаях это фактически период, который может вызвать проблемы с любым кодом, который вы пишете для манипуляций со строками.
Если вы хотите соблюдать локаль пользователя, то требуется более продуманный подход, с другой стороны, если вы просто хотите учесть этот конкретный случай и не заботиться о настройках локали, тогда выпопробуйте что-то вроде этого:
String s = "99999999.999";
s.replaceFirst("^(\\d+)(\\d{3})(\\.|$)", "$1,$2$3");