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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小斥候 高级黑马   /  2014-3-22 19:42  /  1791 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小斥候 于 2014-3-23 22:07 编辑

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

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

18 个回复

倒序浏览
expression必需的。包含子字符串和分隔符的字符串表达式。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
小斥候 + 1 我现在怀疑你运行过没有
何伟超 + 1

查看全部评分

回复 使用道具 举报 0 1
因为楼主用一个空字符“”去分割原字符串,所以返回的第一个数组是空数组,求给分

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1 我都不好意思,仅此一次啊!

查看全部评分

回复 使用道具 举报
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]

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
yanzhendong 发表于 2014-3-22 20:13
expression必需的。包含子字符串和分隔符的字符串表达式。如果expression是一个长度为零的字符串(""),Spli ...

你是在逗我吗?还空数组。。。。
回复 使用道具 举报
郝林杰 发表于 2014-3-22 20:28
package day1;

import java.util.Arrays;

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

额,是空字符串,其实String内部也封装了数组,只是是链表数组,也许是split函数内部对空字符串做了特殊处理才会出现这样的结果,
回复 使用道具 举报
split()里面用" *"也会出现同样的结果,
回复 使用道具 举报
""是通配符,匹配任意字符等效于*,这样楼主明白为什么了吗?
回复 使用道具 举报
  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]楼主好好体会一下


回复 使用道具 举报
我是这么觉得的
刚开始有个指针指在"和a的中间,判断后面是否有元素,有就split,所以指到c的时候后面没有元素就不split了

刚开始指针指的就是一个""
回复 使用道具 举报
yanzhendong 发表于 2014-3-24 00:15
""是通配符,匹配任意字符等效于*,这样楼主明白为什么了吗?

我只是不明白,在一个字符串前面,是怎么样分离出一个空元素的?
回复 使用道具 举报
yanzhendong 发表于 2014-3-23 23:46
额,是空字符串,其实String内部也封装了数组,只是是链表数组,也许是split函数内部对空字符串做了特殊 ...

看来我要去看源码了。。。。。。
回复 使用道具 举报
小斥候 发表于 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时
//因为他们都是指向同一个字符,他们之间没有字符串,所以分割了一个空字符串
        }
       
}
回复 使用道具 举报
yanzhendong 发表于 2014-3-24 12:45
楼主看一下这个就明白了:
package com.blog;

哦,这么说的话稍微有点头绪了。
按你的代码,如果是split("d")?---->【"foo",""】
回复 使用道具 举报
yanzhendong 发表于 2014-3-24 12:45
楼主看一下这个就明白了:
package com.blog;

如果我用空字符串去分隔"food","f"的前面会分出一个""
回复 使用道具 举报
小斥候 发表于 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.函数说明上说的很清楚,最后面的空字符串不会包含在最终的结果中
回复 使用道具 举报
yanzhendong 发表于 2014-3-24 19:02
This method works as if by invoking the two-argument split method with the given expression and a  ...

恩,还是这个空字符搞的鬼,得好好研究研究了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马