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

标签 string scala localization alphabetical

让我们定义 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/

    相关文章:

    php - 如何在 PHP 的所有变体中分割字符串

    java - 为什么在 Java 中不需要创建这些 json 读/写?

    scala - 无法初始化 Scala Gradle 项目 : -bash: gradle/gradle-5. 2.1/bin/gradle:没有这样的文件或目录

    windows - 为什么 QString::localeAwareCompare() 不能正常工作

    从英语到其他语言的快速本地化翻译

    java - Java中提取子字符串

    javascript - 转换 JSON 变量中的日期格式

    python - 从索引开始遍历 python 字符串

    使用谷歌 Guava 的 CacheBuilder 的 scala 2.10 类型不匹配

    ruby-on-rails - 从国家/地区到语言的语言环境回退,无需单独定义每个语言