Ваше регулярное выражение [^a-zA-Z0-9\\s].
должно соответствовать ровно двум символам, чтобы произошла замена. Первый символ - это не алфавитно-цифровой непробельный символ, поэтому в вашей строке они есть,
{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}
^ ^ ^ and so on
И следующий символ в вашем регулярном выражении - .
, который будет соответствовать любому символу. Следовательно, ваше регулярное выражение удаляет символы в парах, где первый символ является тем, который вы намеревались, но второй символ иногда удачно сопоставляется с символом, который вы хотите удалить, но иногда .
соответствует цифре, к сожалению, из-за которой он удаляет цифра. Посмотрите эту демонстрацию для того, что соответствует вашему регулярному выражению.
Демо
Вы должны изменить это .
на +
, чтобы удалить один или несколько символов и использовать это регулярное выражение,
[^a-zA-Z0-9\s]+
Демонстрация правильной замены только нежелательных символов
Ваш код Java,
String s = "{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}";
String processedString = s.replaceAll("[^a-zA-Z0-9\\s]+", "");
System.out.println(processedString);
Печатает следующее без удаления цифр,
23 882 91 317 55 672 871 437 230 12 435 907 320 32 855 107