IntelliJ IDEA
java
split
先来看看API:/ ** * @param regex * the delimiting regular expression * * @param limit * the result threshold, as described above * * @return the array of strings computed by splitting this string * around matches of the given regular expression * * @throws PatternSyntaxException * if the regular expression's syntax is invalid * * @see java.util.regex.Pattern * * @since 1.4 * @spec JSR-51 */ public String[] split(String regex, int limit) { return Pattern.compile(regex).split(this, limit); }
经过上面一篇的内容,已经知道了第一个参数是正则表达式这里就着重说下第二个参数的含义,就是返回值数组的最大长度来个例子Code:package chapter4;/** * Created by MyWorld on 2016/3/28. */public class StringSplitDemo { public static void main(String[] args) { String demoStr = 'v1|v2|v3'; String[] result = demoStr.split('\\|', 2); for (String s : result) { System.out.println(s); } }}
执行下看看是不是返回数组的长度 是不是最大是2Output:v1v2|v3没有看懂吧一起再来看看API
聊聊个人的理解,使用limit值,可以提高效率就以刚才的例子,因为是split后的数组长度是3,如果limit是2,则就少匹配一次了不少tx是不是觉得split(String regex, int limit)方法中的代码看着有些眼熟是的,就是正则表达式30分钟入门系列里使用java.utilPattern看下这个API的源码public String[] split(CharSequence input, int limit) { int index = 0; boolean matchLimited = limit > 0; ArrayList
上述源码也印证刚才的分析。如果确定只获取前几个split后的子串,使用合适的limit值会减少使用正则表达式匹配的次数,有利于提高效率如果对多个字符串进行split操作,直接使用字符串的split(String regex)是否合适呢?当然在功能上是没有影响,这个地方聊聊性能吧大家看看下面下面这两种写法的效率Code:package chapter4;import java.util.ArrayList;import java.util.List;import java.util.regex.Pattern;/** * Created by MyWorld on 2016/3/28. */public class StringSplitDemo { public static void main(String[] args) { List
执行下看看结果Output:Cost :53Cost :14从上面的执行结果上看,差别不是很大因为上面使用正则表达式也比较简单了使用相同正则表达式匹配多个字符串的场景,建议直接使用java.util.regex.Pattern而不是使用字符串的split方法如果数据量不大,差别就不明显,根据情况斟酌使用吧