Groovy 如何查找、删除和读取此符号${}中的文本

Groovy 如何查找、删除和读取此符号${}中的文本,groovy,Groovy,用户输入的示例数据。 预订/${mm}/${yyyy} ${yyyy}/booking/${mm} 预订/${mm}${yyyy}/00 我的问题是如何取出${}并读取其中包含的内容,然后根据格式替换为月/年 因此,保存到数据库后,输出应为“booking/10/2013” 我正在使用Grails。希望能用Java/groovy解决这个问题。我只是解决了这个问题在这里输入代码 import java.text.SimpleDateFormat; import java.util.Date; im

用户输入的示例数据。

  • 预订/${mm}/${yyyy}
  • ${yyyy}/booking/${mm}
  • 预订/${mm}${yyyy}/00
  • 我的问题是如何取出${}并读取其中包含的内容,然后根据格式替换为月/年

    因此,保存到数据库后,输出应为“booking/10/2013”


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

    我只是解决了这个问题
    在这里输入代码

    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;
    }
    

    }

    您可以使用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
    

    只是字面上的
    String#替换(String,String)
    it?我的意思是用户如何在某个字段中键入。