는이 같은 코드를 작성할 수 있습니다접두어에서 문자열을 일치시키고 나머지를 가져 오는 방법은 무엇입니까?
str match {
case s if s.startsWith("!!!") => s.stripPrefix("!!!")
case _ =>
}
을하지만 더 나은 솔루션이 알고 싶어요. 예를 들어 :
str match {
case "!!!" + rest => rest
case _ =>
}
는이 같은 코드를 작성할 수 있습니다접두어에서 문자열을 일치시키고 나머지를 가져 오는 방법은 무엇입니까?
str match {
case s if s.startsWith("!!!") => s.stripPrefix("!!!")
case _ =>
}
을하지만 더 나은 솔루션이 알고 싶어요. 예를 들어 :
str match {
case "!!!" + rest => rest
case _ =>
}
val r = """^!!!(.*)""".r
val r(suffix) = "!!!rest of string"
그래서 suffix
는 문자열의 나머지로 채워집니다, 또는 scala.MatchError
가 발생됩니다.
다른 변형은 다음과 같습니다
val r = """^(!!!){0,1}(.*)""".r
val r(prefix,suffix) = ...
그리고 prefix
이 일치합니다 하나! 또는 null 일 수 있습니다. 예 :
(prefix, suffix) match {
case(null, s) => "No prefix"
case _ => "Prefix"
}
위를
는 좀 더 복잡한 당신이 필요로하는 것보다이지만, 스칼라의 정규 표현식 통합의 힘을보고 가치가있다. 당신이 수시로 물건의 종류가 있다면, 그것은
str match{
case BangBangBangString(rest) => println(rest)
case _ => println("Doesn't start with !!!")
}
또는
for(BangBangBangString(rest)<-myStringList){
println("rest")
}
object BangBangBangString{
def unapply(str:String):Option[String]= {
str match {
case s if s.startsWith("!!!") => Some(s.stripPrefix("!!!"))
case _ => None
}
}
}
그런 다음 당신은 추출기를 사용할 수있는 추출기를 만드는 아마 가치
좋은 질문입니다! 나는 답을 찾기 위해 많은 노력을했습니다. 여기
대신 단일 사용자 추출기를 만드는 good link where I found the answerobject _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";
}
}
}
다른 질문에 대한 대답입니다. –
, 당신이 좋아하는 startsWith 인수의 첫 번째 매개 변수로 접두사 추출기와 같은 클래스를 만든 다음 그것을 사용할 수 있습니다 :'발 BandBangBangString = 새로운 PrefixExtractor ("!!!") ' – Chad