как отсортировать строку, содержащую число в котлине - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть модель, которая содержит некоторые поля.Я хочу отсортировать эту модель перед шоу в утилизаторе по отсортированному названию.мой заголовок содержит число в строку в некоторой части, например, в сеансе 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 голосов
/ 26 декабря 2018

Я нашел решение:)

Я должен заменить первую часть пробелом.тогда мы можем получить второй номер детали из строки и преобразовать его в int и отсортировать его.

 val matcher = pattern.matcher(o1.title?.replace("session 1", ""))
 val matcher2 = pattern.matcher(o2.title?.replace("session 1", ""))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...