Невозможно заменить текст соответствующей группой: ArrayIndexOutOfBoundsException: length = 2; Индекс = 2 - PullRequest
2 голосов
/ 14 января 2020

В моем Kotlin проекте: у меня есть текст:

DATA: 30-11-19 

Мне нужно извлечь только дату.

Я пытаюсь это:

 private fun testDates() {
        val DATE_REGEXP = ".*?\\d{2}-\\d{2}-\\d{2}.*"
        val someText = "DATA: 30-11-19"
        if (DATE_REGEXP.toRegex().matches(someText)) {
            val replace = someText.replace(DATE_REGEXP.toRegex(), "$1");
            Debug.d(TAG, "testDates_replace = $replace")
        }
    }

Но я получаю ошибку во время выполнения:

01-14 18:50:29.862 E/AndroidRuntime(31161): Caused by: java.lang.reflect.InvocationTargetException
01-14 18:50:29.862 E/AndroidRuntime(31161):     at java.lang.reflect.Constructor.newInstance(Native Method)
01-14 18:50:29.862 E/AndroidRuntime(31161):     at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267)
01-14 18:50:29.862 E/AndroidRuntime(31161):     ... 16 more
01-14 18:50:29.862 E/AndroidRuntime(31161): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
01-14 18:50:29.862 E/AndroidRuntime(31161):     at java.util.regex.Matcher.group(Matcher.java:579)
01-14 18:50:29.862 E/AndroidRuntime(31161):     at java.util.regex.Matcher.appendEvaluated(Matcher.java:138)
01-14 18:50:29.862 E/AndroidRuntime(31161):     at java.util.regex.Matcher.appendReplacement(Matcher.java:111)
01-14 18:50:29.862 E/AndroidRuntime(31161):     at java.util.regex.Matcher.replaceAll(Matcher.java:319)
01-14 18:50:29.862 E/AndroidRuntime(31161):     at kotlin.text.Regex.replace(Regex.kt:143)
01-14 18:50:29.862 E/AndroidRuntime(31161):     at com.myproject.testDates(ScanCheckViewModel.kt:817)
01-14 18:50:29.862 E/AndroidRuntime(31161):     at com.myproject.<init>(ScanCheckViewModel.kt:98)
01-14 18:50:29.862 E/AndroidRuntime(31161):     ... 18 more

1 Ответ

2 голосов
/ 14 января 2020

$1 представляет вторую группу совпадений, захваченных (), поэтому вам необходимо добавить пару, поэтому используйте

.*?(\\d{2})-(\\d{2})-\\d{2}.*
   ^      ^

Примечание. По умолчанию $0 фиксирует все совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...