一道腾讯java笔试题-稍不留神便出错,不信,你来试试
时间:2010-04-03 来源:夏德虎
前日到腾讯进行了笔试,回想其中一道笔试选择题无太大把握.回来上机进行了验证,果然选错了.特在此记下,已便日后查阅.
试题如下:
"|DF|A".split("|").length的结果是()
A 2 B 3 C 5 D 6
我知道String的split方法极容易出错,然而想不到的是这道题的答案竟然是D.
分析:
这道题的关键是String.split方法的参数是一个正则表达式字符串,split实际上调用的是:
public String[] split(String regex, int limit) { |
而"|"这里不是简单的'|'字符,查阅Pattern类API就会知道:
"|"是正则表达式里的逻辑或运算符,它被编译后匹配的是其左右两边的任意一个字符串.举个例子来说
String[] arr = "a1b2cc1dd".split("1|2");//以1或者2分隔字符串
结果:
//以空串或者空串分隔字符串,实际上是分隔每一个字符
String[] arr = "a1b2cc1dd".split("|");
结果: |
这道题到这里已经知道为什么要选择D了,但对于String.split方法我觉得更容易出问题的还在以下一些例子,请读者自己查看源码查找答案:
"|DF|A|||".split("[|]").length = 3
"||DF|A|||".split("[|]").length = 4
//关键看Pattern类源码
public String[] split(CharSequence input, int limit) {
//请看这里做了什么操作,分隔后的结果从最后开始遍历,凡是等于空串的一律截掉,否则退出 |