Есть ли способ переформатировать строку Java с помощью регулярных выражений? - PullRequest
0 голосов
/ 03 декабря 2010

Есть ли способ использовать регулярное выражение Java для изменения строки в определенный формат?Например, у меня есть строка ввода, содержащая дату и время, которые можно вводить с различными разделителями. Могу ли я использовать регулярное выражение, чтобы изменить его на использование определенного разделителя?Если я могу, как я могу это сделать?В настоящее время я просто проверяю ввод с помощью регулярного выражения, а затем объединяю новую строку вместе с желаемыми разделителями, например так:

Pattern dtPatt = Pattern.compile("\\d\\d\\d\\d[/\\-.]\\d\\d[/\\-.]\\d\\d[tT/\\-.]\\d\\d[:.]\\d\\d[:.]\\d\\d");
Matcher m = dtPatt.matcher(dtIn);
if (m.matches()) {
    String dtOut = dtIn.substring(0, 4) + "/" + dtIn.substring(5, 7) + "/" + 
                   dtIn.substring(8, 10) + "-" + dtIn.substring(11, 13) + ":" +
                   dtIn.substring(14, 16) + ":" + dtIn.substring(17, 19);
    // do processing with dtOut
} else {
    System.out.println("Error!  Bad date/time entry.");
}

Кажется, что я мог бы сделать это с помощью регулярного выражения, номного гугля, чтения и экспериментов не дало ничего, что работает.

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010

Попробуйте следующее

    Pattern dtPatt = Pattern.compile( "(\\d\\d\\d\\d)[/\\-.](\\d\\d)[/\\-.](\\d\\d)[tT/\\-.](\\d\\d)[:.](\\d\\d)[:.](\\d\\d)" );
    Matcher m = dtPatt.matcher( str );

    if ( m.matches() )
    {
        StringBuffer sb = new StringBuffer();
        m.appendReplacement( sb, "$1/$2/$3-$4:$5:$6" );

        String result = sb.toString();
    }
    else
    {
        System.out.println( "Error!  Bad date/time entry." );
    }

Два изменения

  • Измените шаблон регулярного выражения, чтобы иметь группировки, используя ()
  • Используйте appendReplacement с шаблоном замены, где$ x использует определенную группу, соответствующую шаблону.
2 голосов
/ 03 декабря 2010

Я бы попробовал

DateFormat DF = new SimpleDateFormat("yyyy/MM/dd-HH:mm:dd");

String dtIn2 = String.format("%s/%s/%s-%s:%s:%s", dtIn.split("\\D+"));
DF.parse(dtIn2); // to validate the date produced.
1 голос
/ 03 декабря 2010

Попробуйте методы Matcher appendReplacement() и appendTail(). Хороший пример есть в appendReplacement():

Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...