gpt4 book ai didi

string - 如果 String 是 'alphabetically growing' ,如何检查 Scala ?

转载 作者:行者123 更新时间:2023-12-04 23:49:02 26 4
gpt4 key购买 nike

让我们定义 String 在以下情况下“按字母顺序增长”:

  • 每个字母按字母顺序比前一个大。
  • 字母是否大写无关紧要。

  • 这些字符串“按字母顺序增长”:
  • "abcde"
  • "aBfJz"

  • 而这些不是:
  • "abbcd"
  • "abdDz"
  • "zba"

  • 让我们假设我们正在检查只包含字母的字符串。
    可以使用以下代码在 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com