标签:查找 需要 info 报错 字符串 lsp ges api pat
业务很简单就是进行字段拼接为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 - 如果正则表达式的语法无效
标签:查找 需要 info 报错 字符串 lsp ges api pat
原文地址:https://www.cnblogs.com/hejunhong/p/10336958.html