You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin应用崩溃:正则分割字符串后数组越界问题求助

问题分析与解决方案

错误根源

报错java.lang.ArrayIndexOutOfBoundsException: length=1; index=1明确说明:你用|分割strTxtLido后得到的数组只有1个元素,但代码里直接访问了arr[1]、arr[2]等超出数组长度的索引,这必然导致崩溃。

出现这种情况的核心原因:

  • strTxtLido为空字符串,或者内容里完全没有|分隔符,导致分割后的数组长度仅为1
  • 输入的票据字符串格式不符合预期,没有按|分割成至少7个部分(你代码里用到了arr[6])

修复方案

1. 先校验数组长度,避免越界访问

在构建票据内容前,先判断分割后的数组是否满足长度要求,不满足则直接返回错误提示:

fun mostrarBilhete(){
    strMostraBilhete = "Automacao\n" +
            "Saiba mais em: \n"+
            "www.exemploautomacao.com.br\n"+
            "--------------------------------\n"+
            "Demo  Venda Passagem\n"+
            "--------------------------------\n"
    // 用Kotlin原生split更简洁,替代Pattern
    val arr = strTxtLido.split("|")
    Log.i("TESTE txtLido", strTxtLido)
    Log.i("TESTE arr", arr.contentToString())

    // 校验数组长度是否符合预期(需要至少7个元素)
    if (arr.size < 7) {
        strMostraBilhete += "Erro: Formato de bilhete inválido"
        return
    }

    strMostraBilhete+= buildString {
        append("--------------------------------\n")
        append("Origem:")
        append(arr[0])
        append("  ")
        append("Destino: ")
        append(arr[1])
        append("\nData: ")
        append(arr[2])
        append(" |")
        append(arr[3])
        append("\n")
        append("(Poltrona: ")
        append(arr[4])
        append(" Plataforma 1)\n")
        append("--------------------------------\n")
        append("Tarifa:                   130.00\n")
        append("Valor a Pagar:            130.00\n")
        append("\nFORMA DE PAGAMENTO VALOR PAGO R$\n")
        append("Dinheiro                  150.00\n")
        append("Troco                      20.00\n\n")
        append("Consulte pela chave de acesso em\n")
        append("www.exemploautomacao.com.br")
        append("\n0000 0000 0000 0000 0000 0000\n\n")
        append("Passageiro: ")
        append("DOC 0000000000 - \n")
        append(arr[5])
        append("\nData de autorizacao: ")
        append(arr[6])
    }
}

2. 更安全的索引访问方式(可选)

如果不想直接中断流程,可以用getOrNull方法访问索引,不存在时返回默认值,避免崩溃:

// 示例:访问arr[1],不存在则显示"N/A"
append(arr.getOrNull(1) ?: "N/A")

3. 排查输入内容

查看LogCat中TESTE txtLido和TESTE arr的日志输出,确认:

  • strTxtLido的实际内容是否为空
  • 内容里是否包含足够的|分隔符,是否符合你预期的格式

内容的提问来源于stack exchange,提问作者João Pedro Leite de Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:07:05