基本上大家在字符串的操作中,或多或少都会用到split这个东西,若不深究,可能会感觉。。。这东西有什么用?
split可算是java关键字中较为突出的一个,也算是java的新特性吧。
主要用途就是:字符串的分割,而且在涉及“变动”字符串,如我们常说的:StringBuffer 中尤为常用。
作为字符串的经典例题,我们先来看下面一段代码:
package 一些小程序.字符串替换; //包名
import java.util.Scanner;
public class TH {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
String a,b,c,d;
a=scan.nextLine();
b=scan.nextLine();
c=scan.nextLine();
String[] s=a.split(" ");
for(int i=0;i
第11行,如愿以偿看见了split,可是,它的用处貌似并不明显。。。
别急,我们先来介绍一下split:
java.lang.string.split
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator,[limit]])
参数:
stringObj
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator
可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
limit
可选项。该值用来限制返回数组中的元素个数。
说明
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解
separator 不作为任何数组元素的部分返回。
split将它看中的每个位置作为分割点,把字符串分割为n个子串(当然,如果精确的话,还可以分割为n个字符)
我们来显式的看一下它的作用:
public static String[] ss=new String[20];
public SplitDemo() {
String s = "The rain in Spain falls mainly in the plain.";
// 在每个空格字符处进行分解。
ss = s.split(" ");
}
public static void main(String[] args) {
SplitDemo demo=new SplitDemo();
for(int i=0;i
运行结果:
The
rain
in
Spain
falls
mainly
in
the
plain.
再来看一下:
public static String[] ss=new String[20];
public SplitDemo() {
String s = "The rain in Spain falls mainly in the plain.";
// 在每个空格字符处进行分解。
ss = s.split(" ",2);
}
public static void main(String[] args) {
SplitDemo demo=new SplitDemo();
for(int i=0;i
运行结果:
The
rain in Spain falls mainly in the plain.
想一下,split中加的数字有什么意义? ——限定将字符串分割为几部分
至此,我们已经对它的简单用途做了了解,但是,它真的这么简单吗?
public static void main(string[] args) {
string value = "192.168.128.33";
string[] names = value.split(".");
for (int i = 0; i < names.length; i++) {
system.out.println(names[i]);
}
}
运行结果:
你没看错,没有任何输出。。。
对比前面程序,为什么呢?
我们明明是想以符号“.”分割字符串啊
让我们来看看 split 方法的方法签名吧:
public string[] split(string regex)
这里的参数的名称是 regex ,也就是 regular expression (正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式。
正如我们熟知的那样,“.”在正则表达式中表示“除换行符外的任一字符”,要知道,我们操作的是字符串,而字符串中任何一个字母、数字或符号都是字符,这样,我们程序就什么都输不出来。
看了 split 方法的实现代码就更坚定了我们的信心:
public string[] split(string regex, int limit) {
return pattern.compile(regex).split(this, limit);
}
split 的实现直接调用的 matcher 类的 split 的方法。读者已经知道,“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。
(其中,matcher类中最著名的matches方法:另一篇java中的正则表达式中做了简要介绍)
修改上面代码:
public static void main(string[] args) {
string value = "192.168.128.33";
string[] names = value.split("//.");
for (int i = 0; i < names.length; i++) {
system.out.println(names[i]);
}
}
我们可以得到:
192
168
128
33
同理,如果用竖线“|”分隔的话,将出现不可得到的结果,必须改为“//|”;