2011-07-14 4 views
3

Мой код, вероятно, настолько убит, что мне нужно объяснить все на английском языке. В основном я создал класс Date, и я хотел бы, чтобы принять строку в качестве конструктора и обрабатывать два случаяКак выполнить следующее регулярное выражение в Scala?

  1. Строка в формате «2011-06-30» Get() возвращает «2011-06 -30 00: 00: 00,000"

  2. Строка в формате "2011-06-30 16: 32: 19,452"

Get() распадается на rawDate = 2011-06-30 и rawTime = 16: 32: 19.452, а затем печатает

Моя попытка ниже

case class Date(date: String) { 

    // regex 
    val DateAndTime = """rawDate rawTme""".r 

    def get(): String = date match { 
    case DateTime(rawDate, rawTime) => rawDate + "*" + rawTime 
    case _ => date + " 00:00:00.000" 
    } 
} 

К сожалению, он даже не компилируется, но я не знаю, где я буду неправильно

+1

Это не компилируется, потому что вы определяете регулярное выражение с именем 'DateAndTime' и вы пытаетесь использовать 'DateTime'! – paradigmatic

ответ

7
val dateRegex = """([0-9]{4}-[0-9]{2}-[0-9]{2})""" 
val timeRegex = """([0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3})""" 
val DateOnly = dateRegex.r 
val DateTime = (dateRegex + " " + timeRegex).r 
def get(s:String) = s match { 
    case DateTime(d,t) => d + "*" + t 
    case DateOnly(d) => d + " 00:00:00.000" 
} 

scala> get("2011-06-30") 
res1: java.lang.String = 2011-06-30 00:00:00.000 

scala> get("2011-06-30 16:32:19.452") 
res2: java.lang.String = 2011-06-30*16:32:19.452 
Смежные вопросы