Правильное регулярное выражение для замены em-dash базовым "-" в java
Мой вопрос касается метода replaceAll класса String.
Моя цель - заменить все em-тире в тексте базовым "-".
Я знаю, что символ unicode em-dash - это \u2014.
Я попробовал это следующим образом:
String s = "asd – asd";
s = s.replaceAll("\u2014", "-");
Тем не менее, em-тире не заменяется. Что я делаю неправильно?
Ответы
Ответ 1
Незначительное редактирование после редактирования вопроса:
Возможно, вы не используете em-dash. Если вы не знаете, что у вас есть, хорошим решением является просто найти и заменить все тире... em или иначе. Посмотрите этот ответ, вы можете попробовать использовать Свойство пунктуации префикса Unicode для всех тире == > \\p{Pd}
String s = "asd – asd";
s = s.replaceAll("\\p{Pd}", "-");
Рабочий пример, заменяющий тире em и регулярную тире с указанным выше кодом.
Литература:
public String replaceAll(String regex, String replacement)
Регулярные выражения Unicode
Ответ 2
String.replaceAll
принимает в качестве первого параметра регулярное выражение. Если вы просто хотите заменить все вхождения одного char другим char, рассмотрите возможность использования String.replace(char, char)
:
String s = "asd – asd";
s = s.replace('\u2014', '-');
Ответ 3
Он отлично работает для меня. Я предполагаю, что вы не используете em-dash. Test copy - вставка символа em-dash из карты символов вместо слова.
Ответ 4
Вы путаете параметры.
Попробуйте это
String s = "asd – asd";
s = s.replaceAll("-", "\u2014");