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
相关产品推荐
相关产品推荐

