-2

用户输入的样本数据。

  1. 预订/${mm}/${yyyy}
  2. ${yyyy}/booking/${mm}
  3. 预订/${mm}${yyyy}/00

我的问题是如何取出 ${ } 并阅读其中包含的内容,然后根据格式替换为月/年。

所以保存到数据库后输出应该是“booking/10/2013”​​。

我正在使用 Grails。希望能用Java/groovy解决这个问题。

4

2 回答 2

0

我只是解决问题enter code here

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
public static void main(String[] args) {
    String bookingNo1 = "booking/${mm}/${yyyy}";
    String bookingNo2 = "${yyyy}/booking/${mm}";
    String bookingNo3 = "booking/${mm}${yyyy}/00";
    String newDate = null;
    newDate = getDataString(bookingNo1);
    System.out.println(newDate);
    newDate = getDataString(bookingNo2);
    System.out.println(newDate);
    newDate = getDataString(bookingNo3);
    System.out.println(newDate);
}

public static String getTimeString(String pattern) {
    SimpleDateFormat format = new SimpleDateFormat();
    format.applyPattern(pattern);
    return format.format(new Date());
}

public static String getDataString(String dateInput) {
    String dateString = dateInput;

    String regex = "\\$\\{(mm|yyyy|DD|MM)\\}";

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(dateInput);

    while (matcher.find()) {
        String datePattern = matcher.group()
                .replaceAll("(\\$|\\{|\\})", "");
        dateString = dateString.replaceAll("\\$\\{" + datePattern + "\\}",
                getTimeString(datePattern));
    }
    return dateString;
}

}

于 2013-10-29T03:56:35.870 回答
0

您可以使用 Groovy 执行此操作:

// Given these inputs
def inputs = [ 'booking/${mm}/${yyyy}',
               '${yyyy}/booking/${mm}',
               'booking/${mm}${yyyy}/00' ]

// Make a binding for 'mm' and 'yyyy'
def date = new Date()
def binding = [ mm   : date.format( 'MM' ),
                yyyy : date.format( 'yyyy' ) ]

// Then process each input with STE and print it out
inputs.each { input ->
    println new groovy.text.SimpleTemplateEngine()
                           .createTemplate( input )
                           .make( binding )
}

打印:

booking/10/2013
2013/booking/10
booking/102013/00
于 2013-10-29T12:24:40.547 回答