Scala的split函数处理~等特殊字符时拆分结果不正确问题咨询
问题原因
Scala 中String的单参数split方法继承自 Java 标准库,默认会丢弃拆分结果末尾的所有空字符串。你提供的测试字符串~0.000000~~~使用~作为分隔符拆分后,原生结果应为["", "0.000000", "", "", ""],但单参数split会自动丢弃末尾的3个空字符串,最终仅返回前2个元素,因此访问索引为2的元素时会抛出数组越界异常。
你之前尝试的转义\~、传字符'~'的写法没有生效,是因为~不属于正则特殊字符无需转义,问题本质和分隔符的写法无关,是split方法的默认行为导致的。
解决方法
调用split的双参数重载版本,将第二个参数limit设为负数,即可保留所有拆分结果(包括末尾的空字符串),示例代码如下:
scala> var ma_test="~0.000000~~~" scala> val split_val = ma_test.split("~", -1) split_val: Array[String] = Array("", 0.000000, "", "", "") scala> val split_dis = split_val(2) split_dis: String = ""
limit参数规则补充
limit > 0:最多执行limit - 1次拆分,剩余内容全部放入最后一个元素,仍然会丢弃末尾空字符串limit = 0:和单参数split行为完全一致,丢弃所有末尾空字符串limit < 0:保留所有拆分结果,包含末尾的空字符串
内容的提问来源于stack exchange,提问作者code
相关产品推荐
相关产品推荐

