你真的完全理解了String的split方法?之一
1、先来看看API:
/**
* @param regex
* the delimiting regular expression
*
* @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) {
return split(regex, 0);
}
2、细心的同学已经观察到
split方法的第一个参数是regex,是的,就是前面讲过的正则表达式
还可以使用第二个参数limit,即最多返回几个字符串
来一段常见的代码
package chapter4;
/**
* Created by MyWorld on 2016/3/28.
*/
public class StringSplitDemo {
public static void main(String[] args) {
String demoStr = "Hello world tang";
String[] result = demoStr.split(" ");
for (String s : result) {
System.out.println(s);
}
}
}
3、api已经了解了,输出的结果应该是Hello world tang
执行下看看结果
Output:
Hello
world
tang
4、来猜猜这种场景下的输出是什么
更改下代码
Code:
String demoStr = "v1|v2|v3";
String[] result = demoStr.split("|");
5、是v1 v2 v3 ?
好执行下看看结果
Output:
v
1
|
v
2
|
v
3
6、是不是很意外,为什么呢?
不理解的tx再想想api里怎么说的,第一个参数是什么样的数据呢?
正则表达式
对了
是正则表达式嘛。正则表达式30分钟入门系列不是已经讲过,“|”是用来表示字符串之间或的关系
上面的例子中,regex是"|",从正常的视角来看,除了“|”什么也没有,大家是不是忘了,\b,就是表示字符前后的界定符
"|"就是表示以界定符来分隔字符串,得到的就是一个一个的元素
如果想得到v1 v2 v3,需要怎么做呢
如果不想让“|”作为正则表达式,就加转义符
改下代码
Code:
String[] result = demoStr.split("\\|");
7、执行下,看看结果是否与预期一致
Output:
v1
v2
v3
与预期一致
OK
8、细心的tx有木有受到“|”,这从此正则表达式的启发
如果有多类分隔符的场景
更改代码:
Code:
String demoStr = "v1|v2;v3";
String[] result = demoStr.split("\\||;");
9、执行下看看结果,是不是得到预期的v1 v2 v3
Output:
v1
v2
v3
与预期一致
Ok