让我们定义 String 在以下情况下“按字母顺序增长”:
这些字符串“按字母顺序增长”:
而这些不是:
让我们假设我们正在检查只包含字母的字符串。
可以使用以下代码在 Scala 中检查 String 是否“增长”:
val str = "aBgjz"
val growing = str.map(_.toLower).toSet.toList.sortWith( _ < _ ).mkString.equals(str.map(_.toLower))
此代码运行良好,但仅适用于英文字母。对于带有波兰字母的字符串,结果是错误的。波兰语字母按以下顺序排列:
a, ą, b, c, ć, d, e ...
因此对于:
val str = "aąbćdgz"
结果应该是“真”。所以问题是:
如果给定的字符串对于给定的语言环境“按字母顺序增长”,如何检查 Scala?
val str = "aąbćdgz"
val locale_id = "pl_PL"
....
val growing = ......
最佳答案
scala> import java.util.Locale
scala> import java.text.Collator
scala> val collator = Collator.getInstance(new Locale("pl_PL"))
scala> val str = "aąbćdgz"
str: String = aąbćdgz
scala> str.map(_.toLower).toSet.toList.sortWith( (s1:Char, s2:Char) => collator.compare(s1.toString, s2.toString) < 0 ).mkString.equals(str.map(_.toLower))
res06: Boolean = true
虽然我确实觉得这更容易阅读:
scala> (str, str.tail).zipped.forall { case (s1,s2) => collator.compare(s1.toString,s2.toString) < 0 }
res08: Boolean = true
关于string - 如果 String 是 'alphabetically growing' ,如何检查 Scala ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27304815/