2017-10-17 7 views
0

私はスカラーが初めてです。私は正規表現には新しくないが、スカラーの正規表現はちょっと混乱している。例えば、私の入力変数は、私は真ん中のグループから「デスクトップ」に、上位グループから「TABLET」に名前を入力を変換したい、とに休むだろう「DEVICE」欄scala - 正規表現

enter image description here

から文字列です。 "PHONE"、次のように。それを行う最もエレガントな方法は何ですか?ここで

"IOSTABLET" => "TABLET" 
"ANDROIDTABLET" => "TABLET" 
"TABLET" => "TABLET" 
"SAFARI" => "DESKTOP" 
... 

は、私の解決策は

val tablet = """.*(TABLET)$""".r 
val phone = """.*(PHONE)$""".r 


"IOSTABLET" match { 
    case tablet(device) => "TABLET" 
    case phone(device) => "PHONE" 
    case _ => "DESKTOP" 
} 
+0

Scalaが機能的であるため、最もエレガントな方法はパターンマッチング[docs](https://docs.scala-lang.org/tour/pattern-matching.html)です –

+0

コード例に型がありますおそらくあなたが間違った価値を出している理由 - 'val tab =" ""。*(TABLE)$ "" "rはTABLEの代わりにタブレットでなければなりません。 ($) – Ren

+0

そうですよ!囧... – user1269298

答えて

2
val myDevice = "IOSTABLET" 

val translated = myDevice match { 
    case "IOSTABLET" | "ANDROIDTABLET" | "TABLET" => "TABLET" 
    case "SAFARI" | "IE" => "DESKTOP" 
    case "etc" | "etc2" => "etc3" 
} 

パターンマッチングを使用しているそのようなことは、おそらく最もクリーンなアプローチです。あなたは正規表現を使うことができますが、おそらくここでは保証されません。

+0

ありがとう!できます。しかし、より多くの "DEVICE"型が後で追加される可能性があるため、正規表現の実装は依然として望ましい – user1269298