私はこのようなコードを書くことができます:
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"
}
上記はあなたが必要とするよりも少し複雑ですが、Scalaの正規表現統合の威力を検討する価値があります。
頻繁に行うようなことであれば、おそらくエクストラクターを作成する価値があります。
object BangBangBangString{
def unapply(str:String):Option[String]= {
str match {
case s if s.startsWith("!!!") => Some(s.stripPrefix("!!!"))
case _ => None
}
}
}
その後、次のように抽出を使用できます
str match{
case BangBangBangString(rest) => println(rest)
case _ => println("Doesn't start with !!!")
}
あるいは
for(BangBangBangString(rest)<-myStringList){
println("rest")
}
良い質問 !私も答えを見つけるために多くのことを試みていました。
これは私が答えを見つけた 良いリンクです
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";
}
}
}
開始中Scala 2.13
、これでString
をパターンマッチングすることが可能になりました 文字列補間を適用解除 :
"!!!hello" match {
case s"!!!$rest" => rest
case _ => "oups"
}
// "hello"