• 关于字符串split一些用法


     

    split方法在大数据开发中的多用于日志解析及字段key值分割,最近需求中碰到一个问题在

    无论怎么分割都会出现数组下标越界问题,

    由于前台在sdk中多加了几个字段(测试数据很少,大多为空) ,需要我们进行字段补全插入到mysql中,但项目过于老,2016年项目使用的是spark1.5.2不说,使用java写的

    业务很简单就是进行字段拼接为key进行pv uv IP求和 ,但在添加key时,代码报错了 在苦苦找到spark on yarn的日志后,

    使用 yarn logs -appicationId  jobid号 查看(ui的日志根本没配合适无法打开),频频报出数组下标越界问题

    原因就在split第二参数被我忽略了,传一个分隔符,后面为空的不会进行截取,长度也就是实际有值的那几个字段,我是真的菜

    那么后边的这个int类型的参数是干么用的?很简单,设定利用split函数截取字符串,截取的结果的阀值。-1表示无限制,虽然直接用只有一个参数的split函数也是无限制,但是那样的话,后面如果分隔符之间为空的话,就不会截取。

    public static void main(String[] args) {
        // TODO Auto-generated method stub
     
        String str1 = "a,b,c,,,a";
        String str2 = "a,b,c,,,";
        String str3 = "a,b,c, , ,";
        String[] s1 = str1.split(",");
        String[] s2 = str2.split(",");
        String[] s3 = str3.split(",");
         System.out.println("str1长度:"+s1.length);
        System.out.println("str2长度:"+s2.length);
        System.out.println("str3长度:"+s3.length);
    }

    解决方法:  

        通过查看API我们发现我们常用的split方法默认传递的是0,现在解决str2输出空的解决方法是传递的第二个参数为负数,即可

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static void main(String[] args) {
      // TODO Auto-generated method stub
     
      String str1 = "a,b,c,,,a";
      String str2 = "a,b,c,,,";
      String str3 = "a,b,c, , ,";
      String[] s1 = str1.split(",");
      String[] s2 = str2.split(",",-1);
      String[] s3 = str3.split(",",-1);
       
      System.out.println("str1长度:"+s1.length);
      System.out.println("str2长度:"+s2.length);
      System.out.println("str3长度:"+s3.length);
    }

    经查找API发现在String类中,存在两个split重载方法

    1.public String[] split(String regex)

    根据给定正则表达式的匹配拆分此字符串。

    该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。

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

    Regex 结果

    1
    2
    : { "boo", "and", "foo" }
    o { "b", "", ":and:f" }

    参数:
        regex - 定界正则表达式
    返回:
    字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
    抛出:
    PatternSyntaxException - 如果正则表达式的语法无效

     

     

     

     

  • 相关阅读:
    贰、js的基础(二)类型转换
    贰、js的基础(一)
    ajax的异步请求小结
    壹、js的概述
    sass的用法小结(四)进阶篇
    sass的用法小结(三)
    sass的用法小结(二)
    sass的用法小结(一)
    H5页面在线制作工具搜集
    H5教程:移动页面性能优化
  • 原文地址:https://www.cnblogs.com/hejunhong/p/10336958.html
Copyright © 2020-2023  润新知