Bom, isso aqui está removendo qualquer caractere que não seja ASCII, mas o apóstrofo é ASCII. Por isso ele não é removido.
Você pode trocar para:
string.replaceAll("[\\P{ASCII}']", "")
Repare que agora o “P” é maiúsculo, não tem mais o ^ e incluí o apóstrofo dentro dos colchetes.
Assim ele remove qualquer caractere que não seja ASCII e os apóstrofos.
Basicamente, [^x] é “qualquer coisa que não seja x”, e [x] (sem o ^) é “qualquer coisa que seja x”.
E \p{ASCII} é “qualquer caractere ASCII”, enquanto \P{ASCII} (com “P” maiúsculo) é “qualquer caractere que não seja ASCII”, então [^\p{ASCII}] e [\P{ASCII}] são equivalentes. Mas como eu precisava adicionar o apóstrofo na lista de caracteres válidos, preferi usar o \P.