意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

令人着迷的java关键字——java中split的使用

来源:恒创科技 编辑:恒创科技编辑部
2024-01-26 18:18:59


引入

基本上大家在字符串的操作中,或多或少都会用到split这个东西,若不深究,可能会感觉。。。这东西有什么用?
split可算是java关键字中较为突出的一个,也算是java的新特性吧。
主要用途就是:字符串的分割,而且在涉及“变动”字符串,如我们常说的:StringBuffer 中尤为常用。

探究

作为字符串的经典例题,我们先来看下面一段代码:


令人着迷的java关键字——java中split的使用

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<s.length;i++){
if(b.equals(s[i])){
s[i]=c;
}
}
// 说实话,看到关于字符串的变换操作,就要想到会用到StringBuffer
StringBuffer sb=new StringBuffer();
for(int i=0;i<s.length;i++){
sb.append(s[i]).append(" ");
}
System.out.println(sb);
}
}

第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<ss.length;i++)
System.out.println(ss[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<ss.length;i++)
System.out.println(ss[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

同理,如果用竖线“|”分隔的话,将出现不可得到的结果,必须改为“​​\\|​​”;


上一篇: UDP和Node图片裁剪小工具 下一篇: 手机怎么远程登录云服务器?