2017-10-17 58 views
0

我是scala的新手。我對正則表達式並不陌生,但scala的正則表達式對我來說有點混亂。例如,我的輸入變量是從「設備」列字符串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 tablet =「」「。*(TABLE)$」「」。r'應該是TABLET而不是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