En Java con cad y max:
cad = cad.replaceAll("(| )(.{1,"+max+"}( +|$)(.)","$2");
(no lo he probado)
Lo guapo seria usar tipos de datos primitivos.
guner, con ese algoritmo te pasaria lo mismo que a #25