2011-07-17 11 views

Respuesta

20
val r = """^!!!(.*)""".r 
val r(suffix) = "!!!rest of string" 

Así suffix se rellenará con resto de cadena, o una scala.MatchError se arrojan.

Una variante diferente sería:

val r = """^(!!!){0,1}(.*)""".r 
val r(prefix,suffix) = ... 

Y prefix o bien coincidir con el !!! o ser nulo. p.ej.

(prefix, suffix) match { 
    case(null, s) => "No prefix" 
    case _ => "Prefix" 
} 

Lo anterior es un poco más complejo que lo que pueda necesitar, pero vale la pena mirar el poder de la integración de expresiones regulares de Scala.

9

Si es el tipo de cosas que hace con frecuencia, es probable que vale la pena crear un extractor

object BangBangBangString{ 
    def unapply(str:String):Option[String]= { 
     str match { 
      case s if s.startsWith("!!!") => Some(s.stripPrefix("!!!")) 
      case _ => None 
     } 
    } 
} 

continuación, puede utilizar el extractor de la siguiente manera

str match{ 
    case BangBangBangString(rest) => println(rest) 
    case _ => println("Doesn't start with !!!") 
} 

o incluso

for(BangBangBangString(rest)<-myStringList){ 
    println("rest") 
} 
+2

en vez de hacer un solo extractor de usuario, usted podría hacer una clase como extractor de prefijo con el primer parámetro del argumento startsWith y luego usarlo como: 'val BandBangBangString = new PrefixExtractor ("!!!") ' – Chad

0

¡Buena pregunta! Incluso estaba intentando mucho para encontrar la respuesta.

Aquí es una good link where I found the answer

object _04MatchExpression_PatternGuards { 
    def main(args: Array[String]): Unit = { 
    val url: String = "Jan"; 

    val monthType = url match { 
     case url if url.endsWith(".org") => "Educational Websites"; 
     case url if url.endsWith(".com") => "Commercial Websites"; 
     case url if url.endsWith(".co.in") => "Indian Websites" 
     case _        => "Unknow Input"; 
    } 
    } 
} 
+0

Esto responde una pregunta diferente. –

Cuestiones relacionadas