黑马程序员技术交流社区

标题: 对split方法的疑问 [打印本页]

作者: 小斥候    时间: 2014-3-22 19:42
标题: 对split方法的疑问
本帖最后由 小斥候 于 2014-3-23 22:07 编辑

String s = "abc";
String[] arr = s.split("");
为什么结果数组下标为0的元素是空呢?

作者: yanzhendong    时间: 2014-3-22 20:13
expression必需的。包含子字符串和分隔符的字符串表达式。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。
作者: yanzhendong    时间: 2014-3-22 20:14
因为楼主用一个空字符“”去分割原字符串,所以返回的第一个数组是空数组,求给分
作者: 郝林杰    时间: 2014-3-22 20:28
package day1;

import java.util.Arrays;

public class De1 {
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String s = "abc";
                String[] arr = s.split("");
               
        System.out.println(Arrays.toString(arr));
        }

}
//输出结果如下啊:
[, a, b, c]

作者: 小斥候    时间: 2014-3-23 22:02
yanzhendong 发表于 2014-3-22 20:13
expression必需的。包含子字符串和分隔符的字符串表达式。如果expression是一个长度为零的字符串(""),Spli ...

你是在逗我吗?还空数组。。。。
作者: 小斥候    时间: 2014-3-23 22:05
郝林杰 发表于 2014-3-22 20:28
package day1;

import java.util.Arrays;

我知道是这个结果。只是不懂为什么?!!!!
作者: 小斥候    时间: 2014-3-23 22:06
我建议别再给乱回答的加分了啊!!!!受不鸟。。。
作者: yanzhendong    时间: 2014-3-23 23:46
小斥候 发表于 2014-3-23 22:02
你是在逗我吗?还空数组。。。。

额,是空字符串,其实String内部也封装了数组,只是是链表数组,也许是split函数内部对空字符串做了特殊处理才会出现这样的结果,
作者: yanzhendong    时间: 2014-3-24 00:01
split()里面用" *"也会出现同样的结果,
作者: yanzhendong    时间: 2014-3-24 00:15
""是通配符,匹配任意字符等效于*,这样楼主明白为什么了吗?
作者: yanzhendong    时间: 2014-3-24 00:23
  1. package com.blog;

  2. import java.util.Arrays;

  3. public class blog10{
  4.         public static void main(String[]args){
  5. String str=new String("adddddaggggbbbaee");
  6. String[] STR=str.split("a");
  7. System.out.println(Arrays.toString(STR));
  8.         }
  9.        
  10. }
复制代码
其实用""匹配abc的过程是这样的,先用""和a匹配,因""是通配的,任意字符都能匹配,因a是第一个字符它前面没有字符了,所以分割的第一个是空字符,这样楼主可能更明白,以上代码的输出结果是:[, ddddd, ggggbbb, ee]楼主好好体会一下



作者: osully    时间: 2014-3-24 09:59
我是这么觉得的
刚开始有个指针指在"和a的中间,判断后面是否有元素,有就split,所以指到c的时候后面没有元素就不split了

刚开始指针指的就是一个""

作者: 小斥候    时间: 2014-3-24 12:20
yanzhendong 发表于 2014-3-24 00:15
""是通配符,匹配任意字符等效于*,这样楼主明白为什么了吗?

我只是不明白,在一个字符串前面,是怎么样分离出一个空元素的?
作者: 小斥候    时间: 2014-3-24 12:21
yanzhendong 发表于 2014-3-23 23:46
额,是空字符串,其实String内部也封装了数组,只是是链表数组,也许是split函数内部对空字符串做了特殊 ...

看来我要去看源码了。。。。。。
作者: yanzhendong    时间: 2014-3-24 12:45
小斥候 发表于 2014-3-24 12:20
我只是不明白,在一个字符串前面,是怎么样分离出一个空元素的?

楼主看一下这个就明白了:
package com.blog;

import java.util.Arrays;



public class blog10{
        public static void main(String[]args){
String str=new String("food");
String[] result=str.split("o");

System.out.println(Arrays.toString(result));//该段代码运行结果是[f, , d],当分割到第二个o时,因第二个o和第一个o是连着的,他们之间没有字符串,所以分割了一个空字符串出来
result=str.split("f");
System.out.println(Arrays.toString(result));//这段代码运行结果是[, ood],split()函数中有一个指针这个指针指向被分割字符串的第一个字符,也就是f,当split函数匹配到第一个f时
//因为他们都是指向同一个字符,他们之间没有字符串,所以分割了一个空字符串
        }
       
}

作者: 小斥候    时间: 2014-3-24 18:19
yanzhendong 发表于 2014-3-24 12:45
楼主看一下这个就明白了:
package com.blog;

哦,这么说的话稍微有点头绪了。
按你的代码,如果是split("d")?---->【"foo",""】
作者: 小斥候    时间: 2014-3-24 18:21
yanzhendong 发表于 2014-3-24 12:45
楼主看一下这个就明白了:
package com.blog;

如果我用空字符串去分隔"food","f"的前面会分出一个""
作者: yanzhendong    时间: 2014-3-24 19:02
小斥候 发表于 2014-3-24 18:19
哦,这么说的话稍微有点头绪了。
按你的代码,如果是split("d")?---->【"foo",""】 ...

This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.函数说明上说的很清楚,最后面的空字符串不会包含在最终的结果中
作者: 小斥候    时间: 2014-3-24 21:42
yanzhendong 发表于 2014-3-24 19:02
This method works as if by invoking the two-argument split method with the given expression and a  ...

恩,还是这个空字符搞的鬼,得好好研究研究了




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