Проблема вывода групп Java Matcher

1

Я хочу изменить строку даты из формата YYYY-MM-DD в формат DD.MM.YYYY с помощью regex. Вот моя реализация:

String date = "2008-12-30"; //30th Dec, 2008 
String searchPattern = "(\\d{4})-(\\d\\d)-(\\d\\d)";

//Implementing the Pattern from searchPattern
Pattern pattern = Pattern.compile(searchPattern);

Matcher matcher = pattern.matcher(date);
String newDate = "";

if(matcher.find())
{
    //Functions          
    newDate = matcher.replaceFirst(matcher.group(3)+"."+matcher.group(2)+"."+matcher.group(1));
    //Issue with group text
    // newDate = matcher.replaceFirst("\3.\2.\1");
}

Если я использую захваченные группы, такие как \1,\2 и т.д., Вывод содержит смешной текст. Итак, проблема в двух словах:

Функция matcher.group(1)\1 возвращает смешной текст

  • 0
    Где "смешной текст" .....
  • 0
    Почему вы используете регулярное выражение не DateFormat?
Показать ещё 3 комментария
Теги:

2 ответа

0

Почему не просто:

String newDate = date.replaceAll("(\\d{4})-(\\d\\d)-(\\d\\d)", "$3.$2.$1");
0

Как уже говорили другие, использование DateFormat лучше подходит для этой цели, и, вероятно, у вас уже есть решение вашей проблемы. Но затем, когда я попытался запустить ваш код, и действительно, я смог воспроизвести то, что вы упомянули.

Удивительно, что у меня разные персонажи, в зависимости от того, куда выводился поток. Результат не имеет ничего общего с вашим выражением regex. и вы можете получить то же самое, написав что-то простое, как

System.out.println((char) 3 + "." + (char) 2 + "." + (char) 1);

Здесь кодовые точки 3, 2 и 1 интерпретируются по-разному, в зависимости от контекста, в котором они используются. Они могут интерпретироваться как управляющие символы ETX, STX и SOH соответственно или графические символы, если они используются на устройстве отображения видео.

Вывод на моем затмении:
└.┐.┌
(Консоль Eclipse, вероятно, сопоставляется с неправильным символом Windows Glyph List 4)

Выход в DOS:
.☻.
(Здесь используется кодовая страница 437)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню