A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵永康 于 2012-9-23 00:41 编辑

大家看看一下程序:
import java.util.*;
public class S{
    public static void main(String[] args){
        String s = "::boo:and:foo::";
        System.out.println(Arrays.toString(s.split(":",-4)));
    }
}

现在的结果是" "," ","boo","and","foo"," "," "
1、假如我把s=":boo:and:foo:";  结果就会是:" ","boo","and","foo"," "
2、假如我把s="boo:and:foo";  结果就会是:"boo","and","foo"
3、假如我把s="boo::and::foo"::;  结果就会是:"boo","," ",and","foo"," "," "
由此我得出的结论就是:
对于在切割的时候:根据满足条件的正则的位置不同而不同。具体就是
假如s中有N个连续满足正则条件的
假设满足正则出现在s的开头或者结尾处:那么切割完后的字符串数组就会保留其N个位置,并给其值为" ";
假如满足正则的出现的s之内,那么切割完后的字符串数组就会保留期N-1个位置,并给其值为" "。
和大家分享一下,以后再使用正则的时候,注意一下哈啊!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
s.split(":",-4) 请问一下,这个-4是什么意思
回复 使用道具 举报
王陶成 发表于 2012-9-23 01:22
s.split(":",-4) 请问一下,这个-4是什么意思

哦 忘记解释了 split(Regext  int limit)
后面的limit分三种情况:
当时0的时候,就是尽可能的多切,并把最后属于null的字符串全部去除
当时正数的时候,比如是N,就会切N-1次
当时负数的时候,就会尽可能的多切,并保留所有切割后的null,就像上述一样
回复 使用道具 举报
那我考考你s.split(“.");这样切是否正确
回复 使用道具 举报
尤圣回 发表于 2012-9-23 11:08
那我考考你s.split(“.");这样切是否正确

我验证了一下,切出来全部是null  想想这是为什么
回复 使用道具 举报
String s = ".boo.and.foo..";
变成这样在切切看
回复 使用道具 举报
import java.util.Arrays;

//我觉得换一种方式更好理解这个。
public class TestSplit {
        public static void main(String args[]) {
                String s = "xbyabcamt";
                String toSplit = "a";
                int part = 2;
                System.out.println(Arrays.toString(s.split(toSplit, part)));
                // 这个正则表达式的作用是用给定的字符串toSplit来分割字符串s,分割为2个部分。所以这个字符串被分为[xby, bcamt]
                System.out.println(Arrays.toString(s.split(toSplit, part+1)));
                // 当你要分割的个数超过字符串a出现的个数,那么就只会按照a出现的总数分割,即[xby, bc, mt]

                System.out.println(Arrays.toString(s.split(toSplit, -4)));
                // 当你给定负数分割超过0减a出现的最大个数(在这里为-2)时,也那么就只会按照a出现的总数分割,即[xby, bc, mt]
               
                System.out.println("4:"+Arrays.toString(s.split(toSplit, 0)));
                // 当你要分割的部分为0时,也会是会按照a出现的总数分割,即[xby, bc, mt]
                toSplit = "z";
                System.out.println(Arrays.toString(s.split(toSplit, -2)));
                // 当给定的字符串toSplit在s中没有出现的时候,不会分割字符串,直接将其打印出来 [xbyabcamt]

        }
}
回复 使用道具 举报
嗯 正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马