使用split获取给定String的所有1个字符长子串的数组

ell*_*lle 4 java arrays string

public static void main(String args[]) {
    String sub="0110000";
    String a[]=sub.split("");
    System.out.println(Arrays.toString(a));
}
Run Code Online (Sandbox Code Playgroud)

我把输出作为

[, 0, 1, 1, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

为什么第一个元素为空?我怎样才能在开始时获得一个没有null的数组?

aio*_*obe 9

第一个参数实际上不是null,它是空字符串"".这是输出的一部分的原因是你拆分空字符串.

分裂的文件说

此方法返回的数组包含此字符串的每个子字符串,该子字符串由与给定表达式匹配的另一个子字符串终止,或者由字符串的结尾终止.

输入字符串中的每个位置都以空字符串(包括位置0)开头,因此split函数也会将位置0处的输入拆分.由于第0个元素前面没有字符,因此第一个元素的空字符串.

试试这个:

String sub = "0110000";
String a[] = sub.split("(?<=.)");
System.out.println(Arrays.toString(a));
Run Code Online (Sandbox Code Playgroud)

输出:

[0, 1, 1, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

该模式(?<=.)是一个"零宽度正向后观",与任意角色(.)相匹配.在文字中,它粗略地说"分裂在每个空字符串上,前面有一些字符".


Gar*_*vis 5

这是一个奇怪String#split的字符串,它实际上是一个正则表达式,匹配输入开头的空字符串.

试着toCharArray()改为:

public static void main(String args[])
{
    String sub="0110000";
    char a[]=sub.toCharArray();
    System.out.println(Arrays.toString(a));
}
Run Code Online (Sandbox Code Playgroud)

我将把它作为练习让读者将char[]数组转换成String[]