android - 如何在kotlin中对包含数字的字符串进行排序

标签 android sorting kotlin

我有一个包含某些字段的模型。我想在回收站放映前通过分类标题对这种模型进行分类。我的标题在某些部分(如 session 1-第22集)中将数字包含在字符串中。我使用此算法对具有两位数的字符串类型的数字(如第22集)进行排序。

sortData.toObservable()
                        .sorted { o1, o2 ->
                            val pattern = Pattern.compile("\\d+")
                            val matcher = pattern.matcher(o1.title)
                            val matcher2 = pattern.matcher(o2.title)

                            if (matcher.find()) {
                                val isFind = matcher2.find()
                                val o1Num = matcher.group(0).toInt()

                                val o2Num = if (isFind) {
                                    matcher2.group(0).toInt()
                                } else {
                                    o1Num + 1
                                }

                                return@sorted o1Num - o2Num
                            } else {
                                return@sorted o1.title?.compareTo(o2.title ?: "") ?: 0
                            }
                        }
                        .toList()
                        .subscribeBy(
                                onError = {
                                    it
                                },
                                onSuccess = {
                                    sortData = it
                                }
                        )

这种算法的问题是,当我的标题仅包含第22集之类的简单格式,并且数字介于0-99之间时,效果很好,但是当我具有以下格式的标题时: session 1-第22集和数字介于0-999之间该算法无法正常工作,我的回收站也没有任何处理方法。可以帮我解决这个问题吗?

最佳答案

我找到了解决方案:)

我必须将第一部分替换为空格。然后我们可以从字符串中获取第二个部件号,并将其转换为int并对其进行排序。

 val matcher = pattern.matcher(o1.title?.replace("session 1", ""))
 val matcher2 = pattern.matcher(o2.title?.replace("session 1", ""))

关于android - 如何在kotlin中对包含数字的字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927813/

相关文章:

android - 以编程方式更改 Drawable 的背景,保持圆角半径

php - 可以在 PHP 中将闭包传递给 usort 吗?

java - Scala 和 Kotlin 的手动 JAR 编译

unit-testing - Kapt generatetubs - 无法使用单元测试中的内部构造函数初始化对象

java.net.协议(protocol)异常 : Too many redirects in Android

android: dlopen 失败: 无法找到符号 "__aeabi_memclr8"

Android:ViewPager 不尊重 WRAP_CONTENT?

c - 在 C 中为目录下排序

c# - 过滤实体,然后按动态字段排序

kotlin - 如何提高此Kotlin代码的可读性?