Возможно, вы уже отказались от этого, но я был заинтригован этой проблемой.
Я считаю, что это частичное решение ...
Родное регулярное выражение:
//.*|("(?:\\[^"]|\\"|.)*?")|(?s)/\*.*?\*/
В Java:
String clean = original.replaceAll( "//.*|(\"(?:\\\\[^\"]|\\\\\"|.)*?\")|(?s)/\\*.*?\\*/", "$1 " );
Это, кажется, правильно обрабатывает комментарии, встроенные в строки, а также правильно экранированные кавычки внутри строк. Я бросил несколько вещей, чтобы проверить, но не исчерпывающе.
Существует один компромисс в том, что все "" блоки в коде будут заканчиваться пробелом после них. Сохранять это простым и решать эту проблему было бы очень сложно, учитывая необходимость аккуратного обращения:
int/* some comment */foo = 5;
Простой цикл Matcher.find / appendReplacement может условно проверять группу (1) перед заменой пробелом и будет содержать только несколько строк кода. Возможно, все же проще, чем полный анализатор. (Я мог бы добавить цикл соответствия, если кому-то интересно.)