黑马程序员技术交流社区

标题: 关于字符串的切割-----个人的一点小发现 [打印本页]

作者: 赵永康    时间: 2012-9-23 00:37
标题: 关于字符串的切割-----个人的一点小发现
本帖最后由 赵永康 于 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个位置,并给其值为" "。
和大家分享一下,以后再使用正则的时候,注意一下哈啊!


作者: 王陶成    时间: 2012-9-23 01:22
s.split(":",-4) 请问一下,这个-4是什么意思
作者: 赵永康    时间: 2012-9-23 10:10
王陶成 发表于 2012-9-23 01:22
s.split(":",-4) 请问一下,这个-4是什么意思

哦 忘记解释了 split(Regext  int limit)
后面的limit分三种情况:
当时0的时候,就是尽可能的多切,并把最后属于null的字符串全部去除
当时正数的时候,比如是N,就会切N-1次
当时负数的时候,就会尽可能的多切,并保留所有切割后的null,就像上述一样

作者: 尤圣回    时间: 2012-9-23 11:08
那我考考你s.split(“.");这样切是否正确
作者: 赵永康    时间: 2012-9-23 11:16
尤圣回 发表于 2012-9-23 11:08
那我考考你s.split(“.");这样切是否正确

我验证了一下,切出来全部是null  想想这是为什么
作者: 尤圣回    时间: 2012-9-23 11:23
String s = ".boo.and.foo..";
变成这样在切切看
作者: 明光照    时间: 2012-9-23 11:35
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]

        }
}

作者: 赵永康    时间: 2012-9-23 13:26
嗯 正解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2