Java 使用string.split()时前导空格

Java 使用string.split()时前导空格,java,string,removing-whitespace,Java,String,Removing Whitespace,下面是我用来拆分字符串的代码 str = "1234".split("") ; System.out.println(str.length) ; //this gives 5 在1前面添加了一个额外的空格,即str[0]=“ 如何在不使用前导空格的情况下拆分此字符串。请改用tocharray() char[] str = "1234".toCharArray(); System.out.println(str.length) ; 如果要在“”上拆分,则应使用字符串的ToCharray方法

下面是我用来拆分字符串的代码

str = "1234".split("") ; 
System.out.println(str.length) ; //this gives 5
在1前面添加了一个额外的空格,即
str[0]=“
如何在不使用前导空格的情况下拆分此字符串。

请改用tocharray()

char[] str = "1234".toCharArray();
System.out.println(str.length) ;
如果要在“”上拆分,则应使用字符串的ToCharray方法

String str = "1234";
System.out.println(str.toCharArray().length);
我只想:

str = "1 2 3 4".split(" ");  

当然,除非有特定的原因,它必须是“1234”

否则您实际上没有得到一个前导空格元素,而是得到一个前导空字符串,从打印整个数组可以看出:

System.out.println(java.util.Arrays.toString("1234".split("")));
输出:

[, 1, 2, 3, 4]
这种行为的基本原理是
“1234”.indexOf(“”
)是
0
。也就是说,分隔符字符串在搜索字符串的开头匹配,因此它在那里创建一个拆分,在返回的数组中给出一个空的初始元素。分隔符也在字符串的末尾匹配,但是您不会在那里得到额外的空元素,因为(正如
string.split
文档所说的)“后面的空字符串将被丢弃”

但是,Java8的行为是错误的。现在文件还说:

如果此字符串的开头有正宽度匹配,则结果数组的开头将包含一个空的前导子字符串开始时的零宽度匹配不会产生这样的空前导子字符串。

(比较和的
String.split
文档。)

因此,在Java 8及以上版本上,上述示例的输出为:

[1, 2, 3, 4]
有关更改的详细信息,请参阅:


无论如何,在这种特殊情况下使用
String.split
是过分的。其他答案是正确的,为了得到一个所有字符的数组,你应该使用它,这是更快更直接的。如果您确实需要一个字符串数组而不是一个字符数组,请参阅:。

如果您使用的是Java 7或以下版本,请使用以下命令:

"1234".split("(?!^)")

@Juvan不是同一个问题,因为那里的人在他的字符串开头已经有一个空格。我的字符串没有。@PM77-1尝试过。不走运。这是用Java 8打印4。谢谢。这确实有效,但是为什么string.split(“”)在开头添加了一个额外的空格。文档中没有这样的规定。您好,欢迎使用Stackoverflow!请仔细阅读。请你详细说明一下你的回答好吗?很难理解你的建议。谢谢哈,不,我不是VB程序员,我是Java,C/C++程序员。我想说的是你的答案并不完整。也许您可以给出一个更简洁的示例,而不仅仅是告诉他使用toCharArray()方法。记住,其他人会在未来看到你的答案,这不仅仅是为了OP。