Я хочу изменить строку даты из формата 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 возвращает смешной текст
Почему не просто:
String newDate = date.replaceAll("(\\d{4})-(\\d\\d)-(\\d\\d)", "$3.$2.$1");
Как уже говорили другие, использование DateFormat лучше подходит для этой цели, и, вероятно, у вас уже есть решение вашей проблемы. Но затем, когда я попытался запустить ваш код, и действительно, я смог воспроизвести то, что вы упомянули.
Удивительно, что у меня разные персонажи, в зависимости от того, куда выводился поток. Результат не имеет ничего общего с вашим выражением regex. и вы можете получить то же самое, написав что-то простое, как
System.out.println((char) 3 + "." + (char) 2 + "." + (char) 1);
Здесь кодовые точки 3, 2 и 1 интерпретируются по-разному, в зависимости от контекста, в котором они используются. Они могут интерпретироваться как управляющие символы ETX, STX и SOH соответственно или графические символы, если они используются на устройстве отображения видео.
Вывод на моем затмении:
└.┐.┌
(Консоль Eclipse, вероятно, сопоставляется с неправильным символом Windows Glyph List 4)
Выход в DOS:
.☻.
(Здесь используется кодовая страница 437)