java中使用split方法切割字符串无效进行时

本文通过一个具体的Java代码示例,展示了如何正确处理字符串中的特殊字符,并解释了使用正则表达式进行字符串分割时常见的错误及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误演示:

 String str = new String("000005.SZ.csv");
System.out.println(str.split(".")[0]);   //一直出现下标越界异常

百思不得其解,之后仔细一看才发现是自己之前一直忽略掉了符号转义问题

 System.out.println(str.split("\\.")[0]);  //正常输出

特此记录,引以为戒

Java 中,如果你尝试使用 `split` 方法通过自定义分隔符(如 `$$G$$`)将字符串分割并转换为集合时遇到问题,可能是以下几个原因导致: ### 常见错误及解决办法 #### 错误一:未正确处理正则表达式特殊字符 Java 的 `String.split()` 方法接受的是一个正则表达式作为参数。如果分隔符包含特殊的正则表达式元字符(例如 `$`, `{`, `[`, 等),你需要对它们进行转义。 **解决方案:** 对于像 `$$G$$` 这样的分隔符,需要将其视为普通文本而不是正则表达式的部分。因此需要对每个特殊字符 `$` 使用双反斜杠 (`\\`) 转义两次,最终变成 `\\$\\$G\\$\\$`。 示例代码: ```java import java.util.Arrays; public class Main { public static void main(String[] args) { String input = "abc$$G$$def$$G$$ghi"; // 正确的分隔符写法 String delimiter = "\\$\\$G\\$\\$"; String[] resultArray = input.split(delimiter); System.out.println(Arrays.toString(resultArray)); // 输出结果 [abc, def, ghi] } } ``` --- #### 错误二:空数组返回 如果输入字符串不符合预期格式,可能会得到意想不到的结果。比如完全没有匹配到分隔符,则整个字符串作为一个元素返回;或者当分隔符位于开头、结尾位置可能导致多余空白项。 **解决方案:** 可以结合其他工具类去除多余的空格或无效条目。 示例修正版代码: ```java List<String> resultList = Arrays.stream(input.split("\\$\\$G\\$\\$")) .filter(s -> !s.isEmpty()) // 移除所有空串 .collect(Collectors.toList()); System.out.println(resultList); // 打印 List 形式的非空值列表 ``` --- #### 错误三:直接把字符串放入 Collection 集合 注意 split 返回的是数组而非集合类型数据结构。若想进一步操作成更高级别的容器形式需手动转型。 **示例补充完整步骤至 List< String > 类型** ```java import java.util.*; import java.util.stream.Collectors; public class TestSplitToCollection{ public static void main (String []args){ String data="a1$$G$$b2$$G$$c3"; List <String>list=Arrays.asList(data.split("\\$\\$G\\$\\$")); // 或者 Stream API 方案 list=Stream.of(data.split("\\$\\$G\\$\\$")).collect(Collectors.toList()); System.out.print(list); } } // 结果打印 [a1,b2,c3] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值