首页 > 基础资料 博客日记

字符串分割(split),将字符串按照指定字符进行分割。split(String regex)和split(String regex, int limit)

2023-07-24 10:48:57基础资料围观299

这篇文章介绍了字符串分割(split),将字符串按照指定字符进行分割。split(String regex)和split(String regex, int limit),分享给大家做个参考,收藏Java资料网收获更多编程知识

一、split(String regex)字符串分割,将字符串按照指定字符进行分割,返回的是一个字符串数组。

  public String[] split(String regex) {
        return split(regex, 0);
    }

原理:参数名称是regex表示的是以某个字符串进行字符分割。

值得注意的是Java中使用String.split对有些特殊字符进行分割时需要进行转义才能进行分割。

例如:“| " ,”*", ". "等,否则无法分割会报错。

实例1:根据空格切割
    public static void main(String[] args) {
        String k1 = "招标人 投标人 设计单位 施工单位";
        String[] k = k1.split(" ");
        System.out.println(k[0]);
        System.out.println(k[1]);
        System.out.println(k[2]);
        System.out.println(k[3]);
    }
输出结果:

实例2:根据特殊字符进行“.”分割
    public static void main(String[] args) {
        String k1 = "招标人.投标人.设计单位.施工单位";
        String[] k = k1.split("\\.");//需要转义
        System.out.println(k[0]);
        System.out.println(k[1]);
        System.out.println(k[2]);
        System.out.println(k[3]);
    }
输出结果:

二、split(String regex, int limit)字符串分割,返回的是字符串数组。

 public String[] split(String regex, int limit) {
        /* fastpath if the regex is a
         (1)one-char String and this character is not one of the
            RegEx's meta characters ".$|()[{^?*+\\", or
         (2)two-char String and the first char is the backslash and
            the second is not the ascii digit or ascii letter.
         */
        char ch = 0;
        if (((regex.value.length == 1 &&
             ".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) ||
             (regex.length() == 2 &&
              regex.charAt(0) == '\\' &&
              (((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 &&
              ((ch-'a')|('z'-ch)) < 0 &&
              ((ch-'A')|('Z'-ch)) < 0)) &&
            (ch < Character.MIN_HIGH_SURROGATE ||
             ch > Character.MAX_LOW_SURROGATE))
        {
            int off = 0;
            int next = 0;
            boolean limited = limit > 0;
            ArrayList<String> list = new ArrayList<>();
            while ((next = indexOf(ch, off)) != -1) {
                if (!limited || list.size() < limit - 1) {
                    list.add(substring(off, next));
                    off = next + 1;
                } else {    // last one
                    //assert (list.size() == limit - 1);
                    list.add(substring(off, value.length));
                    off = value.length;
                    break;
                }
            }
            // If no match was found, return this
            if (off == 0)
                return new String[]{this};

            // Add remaining segment
            if (!limited || list.size() < limit)
                list.add(substring(off, value.length));

            // Construct result
            int resultSize = list.size();
            if (limit == 0) {
                while (resultSize > 0 && list.get(resultSize - 1).length() == 0) {
                    resultSize--;
                }
            }
            String[] result = new String[resultSize];
            return list.subList(0, resultSize).toArray(result);
        }
        return Pattern.compile(regex).split(this, limit);
    }

原理:split(String regex, int limit)字符串中的regex为非必填项,用来表示用于分割的是一个字符还是多个字符,如果忽略该选项,返回包含整个字符串的单一元素数组。Limit可选项,该值用来限制返回中的元素个数。

注意:特殊字符需要进行转义。

例如:“| " ,”*", ". "等,否则无法分割会报错。

实例1:当regex为空字符情况。
    public static void main(String[] args) {
        String k1 = "招标人#投标人#设计单位#施工单位";
        String[] k = k1.split("",4);//需要转义
        System.out.println(k[0]);
        System.out.println(k[1]);
        System.out.println(k[2]);
        System.out.println(k[3]);
    }
运行结果:

实例2:当regex为“#”号字符情况。
    public static void main(String[] args) {
        String k1 = "招标人#投标人#设计单位#施工单位";
        String[] k = k1.split("#",4);//需要转义
        System.out.println(k[0]);
        System.out.println(k[1]);
        System.out.println(k[2]);
        System.out.println(k[3]);
    }
运行结果:

实例3:当regex为多字符的情况
    public static void main(String[] args) {
        String k1 = "招标人#投标人#设计单位#施工单位";
        String[] k = k1.split("#投标人",4);//需要转义
        System.out.println(k[0]);
        System.out.println(k[1]);
    }
运行结果:

实例4:当regex为“#”字符且limit限制返回2个的情况
   public static void main(String[] args) {
        String k1 = "招标人#投标人#设计单位#施工单位";
        String[] k = k1.split("#",2);//需要转义
        System.out.println(k[0]);
        System.out.println(k[1]);
    }
运行结果:


文章来源:https://blog.csdn.net/weixin_45633852/article/details/129242662
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云