Заменить пробелы перед знаками препинания
Пользователь вводит какой нибудь текст
System.out.println(" привет , как дела ? ");
Как используя replaceAll на выходе получить "привет, как дела?", что бы удалить все пробелы, я использую trim() и регулярки, но проблема в удаление пробелов перед знаками препинания, то есть я хочу взять "\\s\\p{Punct}" и заменить пробел со знаком пунктуации, только на знак пунктуации без пробела
String result = input.replaceAll("(\\s+)" , " ").replaceAll("\\s\\p{Punct}" , " ");
Ответы (2 шт):
Автор решения: And
→ Ссылка
String s = " привет , как дела ? ";
System.out.println(s.replaceAll("\\s+", " ").replaceAll("\\s(\\p{Punct})","$1").trim());
Вывод:
привет, как дела?
Автор решения: StateItPrimitive
→ Ссылка
Если вдруг будет интересен альтернативный способ решения задачи, то можно сделать следующим образом:
public class Example {
public static void main(String[] args) {
System.out.println(modify(" привет , как дела ? "));
}
private static String modify(String original) {
return original.trim()
.replaceAll("\\s+", " ")
.replaceAll("\\s(?=\\p{Punct})", "");
}
}
Здесь используется non-capturing group via zero-width positive lookahead.