如何对Kotlin中包含数字的字符串进行排序

时间:2018-12-26 05:33:34

标签: android sorting kotlin

我有一个包含某些字段的模型。我想在回收站放映前通过分类标题对这种模型进行分类。我的标题在某些部分(例如会话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之间时,这是很好的工作,但是当我的标题具有以下格式时:会话1-第22集和数字之间0-999,此算法无法正常工作,我的回收站中没有任何种类的算法。可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:)

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

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