String s="123456789";String[] ss = s.split("");为什么ss.length是10不是9呢

时间:2022-03-25 02:44:45
String role = "";
String[] roles = "123456789".split("");
for (int i = 0; i < roles.length; i++)
    role += roles[i] + ",";
这时候打出roel是,1,2,3,4,5,6,7,8,9,
而不是1,2,3,4,5,6,7,8,9,
原来一看是roles.length为10不是9,请问这是怎么回事?

6 个解决方案

#1


String[] roles="/123456789".split("/");
System.out.println(roles.length);
这样子,打印出来也是2,所以当字符串的第一个字符是regex时,分隔后的第一个子字符串是""

#2


String[] roles = "123456789".split("");
上面这句话的问题啊,上面这句话的得到的结果是
roles [] = {,1,2,3,4,5,6,7,8,9}
所以,如果你还想这样做的话
应该想办法删除第一个无用的元素

#3


换个思路吧,我觉得应该用s.toCharArray()。

#4


引用split方法的说明"java.lang.string.split
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator,[limit]])
参数
stringObj 
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator 
可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。"
我想是因为你的分隔字符串separator是"",所以split时默认"123456789"最前面的是"",所以你的roles[0]="",但是""仍然占一个长度。所以roles.length是10而不是9。
如果你的字符串是"/1/2/3/4/5/6/7/8/9",split("/"),那么length就是10;相应的,如果是"1/2/3/4/5/6/7/8/9",split("/"),那么length就是9。也就是这个道理。
如果你要得到123456789,只需在system.out.println的时候,for (int i = 1; i < roles.length; i++)
即可去掉第一个字符"".得到1,2,3,4,5,6,7,8,9而非,1,2,3,4,5,6,7,8,9,

#5


楼上方法很多呀

#6


wagrcsbby
这么仔细。可敬

#1


String[] roles="/123456789".split("/");
System.out.println(roles.length);
这样子,打印出来也是2,所以当字符串的第一个字符是regex时,分隔后的第一个子字符串是""

#2


String[] roles = "123456789".split("");
上面这句话的问题啊,上面这句话的得到的结果是
roles [] = {,1,2,3,4,5,6,7,8,9}
所以,如果你还想这样做的话
应该想办法删除第一个无用的元素

#3


换个思路吧,我觉得应该用s.toCharArray()。

#4


引用split方法的说明"java.lang.string.split
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator,[limit]])
参数
stringObj 
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator 
可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。"
我想是因为你的分隔字符串separator是"",所以split时默认"123456789"最前面的是"",所以你的roles[0]="",但是""仍然占一个长度。所以roles.length是10而不是9。
如果你的字符串是"/1/2/3/4/5/6/7/8/9",split("/"),那么length就是10;相应的,如果是"1/2/3/4/5/6/7/8/9",split("/"),那么length就是9。也就是这个道理。
如果你要得到123456789,只需在system.out.println的时候,for (int i = 1; i < roles.length; i++)
即可去掉第一个字符"".得到1,2,3,4,5,6,7,8,9而非,1,2,3,4,5,6,7,8,9,

#5


楼上方法很多呀

#6


wagrcsbby
这么仔细。可敬