В этом случае вы можете использовать:
s = s.replaceAll("\\b?\\b", "'");
Тогда у вас будет гораздо меньше шансов заменить законные знаки вопроса, как упоминал @glowcoder. Тем не менее, я думаю, что @Philipp прав, и это действительно проблема кодировки символов. Похоже, ваш текст должен был быть:
"This ball isn’t yours, this one is John’s"
Если он был закодирован как cp-1252, но декодирован как ASCII, фигурные одинарные кавычки будут заменены вопросительными знаками. Если это так, вы, вероятно, найдете другие символы, такие как фигурные двойные кавычки (“ ”
), en-dash (–
) и em-dash (—
), которые были спрятаны в одном способ.