kotlin - 无法通过匹配组 : ArrayIndexOutOfBoundsException: length=2; index=2 替换文本

标签 kotlin

在我的 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 表示 () 捕获的第二组匹配,因此您需要添加一对,因此使用

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

注意:默认情况下 $0 捕获整个匹配。

关于kotlin - 无法通过匹配组 : ArrayIndexOutOfBoundsException: length=2; index=2 替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59738364/

相关文章:

android - 在 Kotlin for Android 中触发接口(interface)

kotlin - 难以同时使用arrow-kt,Option和RxJava

inheritance - 在 Kotlin 中扩展数据类

android - Kotlin Android 只允许文本中包含表情符号和字母

java - E/Android运行时: FATAL EXCEPTION: RxNewThreadScheduler-42

kotlin - 在 Kotlin 中访问函数的默认参数值

kotlin - 为后端应用程序设置 kotlin 协程范围的正确方法

android-studio - 断点不属于任何类

android - 改造创建 mock 无效的成功响应?

hibernate - CRUD 存储库不遵守 UNIQUE 约束