split作用不是将s以"|"为间隔分成几个小的字符串吗,我这里为什么直接被分成一个一个小的字符了?

split作用不是将s以"|"为间隔分成几个小的字符串吗,我这里为什么直接被分成一个一个小的字符了?

img

竖线需要转义一下才行

String[] str = str.split("\\|");

需要转义才能使用,先不说转义,在Java中,split("|")是正则表达式中的一种特殊用法,它表示空字符串或者任何字符(相当于正则表达式中的"或"操作符"|"),会把原字符串按照空字符或者任意字符进行分割。

实际上,这种用法是不正确的,因为在正则表达式中"|"字符是具有特殊含义的元字符,表示逻辑上的或操作符,因此需要对其进行转义才可以正确地使用。

正常情况下,使用split("\\|")来实现分割的需求,其中"\"是对"|"进行转义,表示把"|"字符本身作为分隔符来进行分割。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7431385
  • 除此之外, 这篇博客: 基础篇 字符串拆分以及转换为整数数组中的 一 一般来讲先做字符串拆分 使用  split 方法  部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1. 注意 特殊字符作为分隔符时需要使用\\进行转义(比如使用\\作为分隔符的话,则转义为\\\\)

    特殊字符有  .$|()[{^?*+\\

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

     

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

     

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

     

     String str = "a|b|c|";//注意这里在最后多了一个|分隔符
            String[] strArr = str.split("\\|",-1);//这里将第二个参数设置为-1
            System.out.println(strArr.length); //这里输出4
            for (int i = 0; i < strArr.length; ++i){
            System.out.println(strArr[i]);//这里输出a b c 空字符串
            }