使用split进行字符串分割时需要注意2点

1、特殊字符作为分隔符时需要使用\\进行转义(如\\ -> \\\\; | -> \\| )

特殊字符

.$|()[{^?*+\\

例如对"|"分隔

未转义

        String str = "01|02|03";
String[] strArr = str.split("|");
System.out.println(strArr.length); //输出8
for (int i = 0; i < strArr.length; ++i) {
System.out.println(strArr[i]);//输出0 1 | 0 2 | 0 3
}

转义

        String str = "01|02|03";
String[] strArr = str.split("\\|");
System.out.println(strArr.length); //输出3
for (int i = 0; i < strArr.length; ++i) {
System.out.println(strArr[i]);//输出01 02 03
}

或者

        String str = "01|02|03";
String[] strArr = str.split("[|]");
System.out.println(strArr.length); //输出3
for (int i = 0; i < strArr.length; ++i) {
System.out.println(strArr[i]);//输出01 02 03
}

或者

        String str = "01|02|03";
// 以|为分隔符来分隔字符串
StringTokenizer st=new StringTokenizer(str,"|");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());//输出01 02 03
}

2.注意对最后空字符的处理(通常有些情况在最后数据为空的时候只保留了个分隔符,如果不做处理的话,数据分割后的个数和预期不一样)

        String str = "01|02|03|"; //注意在最后多了一个|分隔符
String[] strArr = str.split("\\|");
System.out.println(strArr.length); //输出3
for (int i = 0; i < strArr.length; ++i) {
System.out.println(strArr[i]);//输出01 02 03
}

如果需要保留最后一个空字符的数据,则需要将split的第二个参数设置为-1

        String str = "01|02|03|"; //注意在最后多了一个|分隔符
String[] strArr = str.split("\\|",-1);
System.out.println(strArr.length); //输出4
for (int i = 0; i < strArr.length; ++i) {
System.out.println(strArr[i]);//输出01 02 03 空字符
}

split源码截图

Java split 分割字符串避坑的更多相关文章

  1. java关于split分割字符串,空的字符串不能得到的问题

    java关于split分割字符串,空的字符串不能得到的问题   class T { public static void main(String args[]) { String num[] = ne ...

  2. java 竖线分割字符串的问题

    java 竖线分割字符串的问题 例1: String[] paraStr = "6010;320100;A".split(";"); System.out.pr ...

  3. Replace是替代 Split分割字符串

    Replace是替代 Split分割字符串string[] ReadText = str.Replace("\r\n", "@").Split('@'); Sp ...

  4. C# Split的用法,Split分割字符串

    C# Split的用法,Split分割字符串 分割单个字串:string str="来自张三的亲切问候!;string[] strarry=str.Split(new string[] { ...

  5. C#的String.Split 分割字符串用法详解的代码

    代码期间,把代码过程经常用的内容做个珍藏,下边代码是关于C#的String.Split 分割字符串用法详解的代码,应该对码农们有些用途. 1) public string[] Split(params ...

  6. Java StringTokenizer分割字符串

    除了String本身的split方法,JDK在很早就提供了StringTokenizer这个类来分割字符串: 不过,由于正则表达式和String本身的功能越来越多,StringTokenizer已经被 ...

  7. SQLServer实现split分割字符串到列

    网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题. 先贴上某大牛写的sp ...

  8. PLSQL Split分割字符串

    系统自带的split,使用起来方便,但是如果字符串太长,可能会出现异常,这里,我自己写了一个也是该名字,放在自己的包中,引用的时候带包名就好了. --系统自带的函数 /*CURSOR cur_temp ...

  9. String.split()分割字符串方法

    split方法的主要用处就是:分割字符串 split方法返回的是数组类型 主要由以下几种用法: 1.比如有一个字符串var str = "bcadeab";对str使用split方 ...

  10. C#中使用split分割字符串的几种方法小结

    1.用字符串分隔: using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray= ...

随机推荐

  1. ysoserial CommonsCollections1 分析

    /* Gadget chain: ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() Map(Proxy). ...

  2. 使用 MSYS2 编译 exe 可执行程序

    MSYS2 是一个在 Windows上 运行的软件环境,它提供了一种在 Windows 上使用 GNU 工具链的方式,包括 GCC 编译器和 GNU Make 构建系统. 在 MSYS2 中,你可以使 ...

  3. 【LeetCode哈希表】前k个高频词,利用哈希表+vector进行排序操作

    前k个高频词 https://leetcode.cn/problems/top-k-frequent-words/ 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词. ...

  4. CXP协议的传输层介绍 8b/10b编码

    8b/10b编码与K码 upconnection 和downconnection均使用8b/10b编码,因此我们先简单回顾一下8b/10b吧 8B/10B编码被广泛应用到高速串行总线,如IEEE139 ...

  5. 【Azure 环境】Windows中安装Python azure-eventhub-checkpointstoreblob-aio模块时出错 ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory:

    问题描述 在使用Python代码接受EventHub的消息时,根据文档要求安装azure-eventhub-checkpointstoreblob-aio模块时,出现了如下错误: ERROR: Cou ...

  6. 了解 Docker 网络

    本章将会简单地讲述 Docker 中的网络,对于 CNM.Libnetwork 这些,限于笔者个人水平,将不会包含在内. Docker 的四种网络模式 Docker 有 bridge.none.hos ...

  7. 基于图数据库 NebulaGraph 实现的欺诈检测方案及代码示例

    本文是一个基于 NebulaGraph 图算法.图数据库.机器学习.GNN 的 Fraud Detection 方法综述.在阅读本文了解欺诈检测的基本实现方法之余,也可以在我给大家准备的 Playgr ...

  8. Java 线程通信 例子:使用俩个线程打印1-100.线程1 线程2 交替打印

    1 package bytezero.threadcommunication; 2 3 /** 4 * 线程通信的例子:使用俩个线程打印1-100.线程1 线程2 交替打印 5 * 6 * 涉及到的三 ...

  9. Java //100以内的质数的输出(从2开始,到这个数-1结束为止,都不能被这个数本身整除)+优化

    1 //100以内的质数的输出(从2开始,到这个数-1结束为止,都不能被这个数本身整除) 2 boolean isFlag = true; //标识i是否被j除尽,修改其值 3 4 for(int i ...

  10. 牛客周赛34(A~E)

    A 两种情况 两个字符相同只有2 两个字符不相同4 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) fo ...