zoukankan      html  css  js  c++  java
  • split+ Pattern切割字符串

    今天在对一个String对象进行拆分的时候,总是无法到达预计的结果。呈现数据的时候出现异常,后来debug之后才发现,错误出在String spilt上,于是开始好好研究下这东西,开始对api里的split(String regex, int limit)比较感兴趣,可是就是不理解当limit为负数时的情况

    下面是api里的解释:

    limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。

    例如,字符串 "boo:and:foo" 使用这些参数可生成以下结果:

    Regex Limit 结果
    : 2 { "boo", "and:foo" }
    : 5 { "boo", "and", "foo" }
    : -2 { "boo", "and", "foo" }
    o 5 { "b", "", ":and:f", "", "" }
    o -2 { "b", "", ":and:f", "", "" }
    o 0 { "b", "", ":and:f" }



    对limit为负还是有点不理解,尤其是对 o -2组合,

    现在我明白了,{ "b", "", ":and:f", "", "" } 第一个“”是因为两个o之间的空数据,第二个也是这个原因,最后一个是将"boo:and:foo"中最后空字符串也算进去的



    利用Pattern和String类的split方法都可以很好的切割字符串的功能。然而我们如果去查看这两个类的split方法的源码时,我能就会发现String类的split方法执行效率比Pattern类的split方法要低得多。

    String类split方法源码:
    一:

        public String[] split(String regex, int limit) {
        return Pattern.compile(regex).split(this, limit);
        }

    二:

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

          由此我们可以看出split传入的参数是正则表达式,它的内部是每次都comiple正则表达式,再调用Pattern.split方法。 因此,如果你调用String.split非常频繁的话,每次都重新编译正则表达式的代价很高,性能会受到很大影响,此时最好自己预编译Pattern,再调用Pattern.split方法为妙。

    Example:
    package pattern;

    import java.util.regex.Pattern;

    public class testSplit {
        public static void main(String[] args) {
            String regex = ",";
            String str = "Hello cat,Where are you?,I miss you!";
            Pattern p = Pattern.compile(regex);
            String[] s = p.split(str);

            for (String x : s)
                System.out.println(x);
        }
    }
    运行结果:
    Hello cat
    Where are you?
    I miss you!

  • 相关阅读:
    vi/vim
    Linux相关知识
    Pikachu实验环境搭建
    DVWA-XSS(Reflected)(反射型跨站脚本攻击)
    DVWA-SQL Injection(Blind)(SQL盲注)
    DVWA—File Upload(文件上传)
    DVWA—Command Injection(命令注入)
    DVWA—Command Injection(命令注入)中出现乱码
    DVWA—Brute Force(暴力破解)
    sqli-labs闯关之61-65关
  • 原文地址:https://www.cnblogs.com/baoendemao/p/3804738.html
Copyright © 2011-2022 走看看