は次のようにScalaの中の文字列を一致させる方法はありますか?スカラ座、パターンマッチング、文字列
答えて
あなたが正規表現に一致させることによって、あなたの目標を達成することができます。
trait Expr
case class Binary(op: String, leftOperand: String, rightOperand: String) extends Expr
val mulPattern = "(\\d*)\\*(\\d*)".r
val addPattern = "(\\d*)\\+(\\d*)".r
def matcher(arg: String) : Expr = {
arg match {
case mulPattern(left, right) => new Binary("*", left, right)
case addPattern(left, right) => new Binary("+", left, right)
}
}
def main(args: Array[String]): Unit = {
println(matcher("1+2")) // Binary("+", "1", "2")
println(matcher("3*4")) // Binary("*", "3", "4")
}
は、これらのパターンを作成するメソッドを作ることができます。これはおそらく次のようなものです: 'def binRegex(symbol:Char)= raw" "([^ $ symbol] +)[$ symbol]([^ $ symbol] +) .r' –
あなたの答えをありがとう、サー! – DoSofRedRiver
私はそうは思わない。
あなたはString
がChar
のList
またはVector
に変換し、その後mkString
で結果を元に戻す場合は、それを行うことができるかもしれません。しかし、私は何かを考え出すことができません。
しかし、芋、正規表現はより簡潔で読みやすいようになります:
trait Expr
case class Binary(op: String, left: String, right: String) extends Expr
val Expression = """(.*?)\s*([+-\/\^\*])\s*(.*)""".r
def matcher(arg: String) : Expr = arg match {
case Expression(left, op, right) => new Binary(op, left, right)
}
val test = matcher("a + b")
val test2 = matcher("a * b")
あなたのasnwerありがとう! – DoSofRedRiver
また、抽出してこれを行うことができます。
あなたはまた、のようなそれぞれの抽出方法を適用実装することもできますobject Mult {
def unapply(x: String): Option[(String, String)] = x.split("\\*") match {
case Array(a: String, b: String) => Some(a -> b)
case _ => None
}
}
object Add {
def unapply(x: String): Option[(String, String)] = x.split("\\+") match {
case Array(a: String, b: String) => Some(a -> b)
case _ => None
}
}
def matcher(arg: String) = arg match {
case Mult(left, right) => Binary("*", left, right)
case Add(left, right) => Binary("+", left, right)
case _ => println("not matched")
}
:
def apply(l: String, r: String) = s"$l*$r"
が、これは必須ではありません
あなたのソリューションのように思えます。 – DoSofRedRiver
- 1. スカラ+パターンマッチング+文字列オートボックス
- 2. スカラの文字列とIntのパターンマッチング
- 3. 変数は、文字列のスカラ座
- 4. スカラはパターンマッチングで文字列を指定します
- 5. 文字列のパターンマッチング
- 6. CSSの文字列のパターンマッチング
- 7. スカラ文字列 - json
- 8. パターンマッチングエキス文字列スカラ
- 9. スカラRDD [文字列] [文字列、文字列]
- 10. スカラ - ランタイム文字列テンプレート
- 11. スカラ - ケースマッチ部分文字列
- 12. スカラ文字列パターンのベストプラクティス
- 13. スカラ文字列の解析
- 14. スカラの文字列フォーマット
- 15. スカラ座とJavaの配列
- 16. MySQLプロシージャ。 LIKEパターンマッチング - キリル文字列
- 17. スカラ座、
- 18. スカラ、抽出なしのパターンマッチング
- 19. スカラ、RDD配列[文字列]連結
- 20. スカラ/ファントムListColumn [地図[文字列、文字列]]
- 21. バウンディングボックス座標の文字列
- 22. スカラ座、scala.sys.process
- 23. [アッカ、スカラ座]
- 24. キャストやスカラ座
- 25. スカラ文字列の類似度
- 26. スカラ文字列vs java.lang.String型推論
- 27. スカラ文字列の書式設定:エスケープシーケンス
- 28. スカラ:文字列からタプルへ
- 29. スカラ - 正規表現パターンは、文字列
- 30. Json.objスカラ、文字列連結:コンパイルエラー
固定された長さの左右どちらですか? –