这是我用来分割字符串的代码
str = "1234".split("") ;
System.out.println(str.length) ; //this gives 5
在1之前添加了一个额外的空格,即str[0]=" "
如何在没有前导空格的情况下拆分此字符串。
试试这个:
char[] str = "1234".toCharArray();
System.out.println(str.length) ;
你实际上并没有得到一个领先的空白元素,你得到一个领先的空字符串,从打印整个数组可以看出:
System.out.println(java.util.Arrays.toString("1234".split("")));
输出:
[, 1, 2, 3, 4]
这种行为的基本原理是"1234".indexOf("")
是0
。即,分隔符字符串在搜索的字符串的开头匹配,因此它在那里创建一个分割,在返回的数组中给出一个空的初始元素。分隔符也匹配字符串的末尾,但是你没有得到一个额外的空元素,因为(正如String.split
文档所说)“尾随空字符串将被丢弃”。
但是,Java 8的行为was changed。现在文档也说:
当在该字符串的开头存在正宽度匹配时,在结果数组的开头包含空的前导子字符串。然而,开头的零宽度匹配从不会产生这样的空前导子串。
(比较String.split
和Java 7的Java 8文档。)
因此,在Java 8及更高版本中,上例中的输出是:
[1, 2, 3, 4]
有关更改的更多信息,请参阅:Why in Java 8 split sometimes removes empty strings at start of result array?
无论如何,在这种特殊情况下使用String.split
是过度的。其他答案是正确的,要获得所有字符的数组,你应该使用str.toCharArray()
,这是更快,更直接。如果你真的需要一个单字符串而不是一个字符数组的数组,那么请参阅:Split string into array of character strings。
使用toCharArray()代替....................
如果你想拆分“”那么应该使用toCharArray方法的字符串。
String str = "1234";
System.out.println(str.toCharArray().length);
如果您使用的是Java 7或更低版本,请使用以下命令:
"1234".split("(?!^)")
我会这样做:
str = "1 2 3 4".split(" ");
除非当然有一个特定的原因,为什么它必须是“1234”