Scala如果字符串的条件给出不同的结果

时间:2018-04-30 15:53:16

标签: scala

vc100_60大于vc75_60

如何在scala代码中实现它

 scala> val str1 ="vc100_60"
 str1: String = vc100_60

 scala> val str2 ="vc75_60"
 str2: String = vc75_60

 scala> val result = if(str1 > str2) { println(str1) } else {println(str2)}
 vc75_60

预期答案是vc100_60 但我得到了vc75_60

需要进行哪些代码更改才能从if条件

获取vc100_60

2 个答案:

答案 0 :(得分:0)

这是一个词典比较。他们比较明确。在这种情况下,"99"将大于"1000",因为"99"中的第一个字符更大。每当一个角色变得伟大,其他角色就不会被比较。

答案 1 :(得分:0)

有很多方法可以将这些字符串解析为您感兴趣的Integer值以进行比较 - 这里使用正则表达式:

val regex = """vc(\d+)_.*""".r

def parse(str: String): Int = str match {
  case regex(v) => v.toInt
  case _ => 0 // when parsing fails; Alternatively - throw exception or use a different default value
}

if (parse(str1) > parse(str2)) { println(str1) } else { println(str2) }

// or, another way to print the minimum 
// which can easily be applied to more than two strings:
val min = List(str1, str2).minBy(parse)
println(min)

当然,我根据这两个例子对格式做了一些假设,必要时修复了正则表达式。