This solution is more involved but my feeling is that it is fullproof, whereas the regex solutions may not be 100% correct (as per the famous "do not use regex for HTML stackoverflow thread").
Using Jsoup:
public static String html2text(String html) {
return Jsoup.parse(html).text();
}
This will give you for sure a text only containing the ampersands you need, not the rest.
Then create a Map containing on the left-hand side the phrases like M&M
and Ella & David
and then on the right hand side the phrases M&M
and Ella & David
The final step is going back to the initial HTML text and replacing the strings on the LHS of the map with those of the RHS.
Edit: you can of course use any HTML parser you like - just wanted to give you a quick example of how easy it is to use one.