2017-10-17 64 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