2

这是我用来分割字符串的代码

str = "1234".split("") ; 
System.out.println(str.length) ; //this gives 5

在 1 之前添加了一个额外的空格,即str[0]=" " 如何在没有前导空格的情况下拆分此字符串。

4

6 回答 6

2

尝试这个:

char[] str = "1234".toCharArray();
System.out.println(str.length) ;
于 2013-04-20T05:11:33.847 回答
1

你实际上并没有得到一个前导的空白元素,你得到的是一个前导的空字符串,从打印整个数组可以看出:

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

输出:

[, 1, 2, 3, 4]

"1234".indexOf("")这种行为的基本原理是事实0。即,分隔符字符串在搜索字符串的开头匹配,因此它在那里创建一个拆分,在返回的数组中给出一个空的初始元素。分隔符也在字符串的末尾匹配,但你不会在那里得到额外的空元素,因为(如String.split文档所述)“尾随空字符串将被丢弃”。

但是,Java 8 的行为发生了变化。现在文档还说:

当此字符串的开头存在正宽度匹配时,则在结果数组的开头包含一个空的前导子字符串。但是,开头的零宽度匹配永远不会产生这样的空前导子字符串。

(比较Java 7Java 8String.split的文档。)

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

[1, 2, 3, 4]

有关更改的更多信息,请参阅:为什么在 Java 8 中拆分有时会在结果数组的开头删除空字符串?

String.split无论如何,在这种特殊情况下使用它是多余的。其他答案是正确的,以获得您应该使用的所有字符的数组str.toCharArray(),这更快,更直接。如果您确实需要一个单字符字符串数组而不是字符数组,请参阅:将字符串拆分为字符串数组

于 2015-11-08T22:12:00.383 回答
0

改用 toCharArray() ......

于 2013-04-20T05:10:02.293 回答
0

如果要在 "" 上拆分,则应使用字符串的 toCharArray 方法。

String str = "1234";
System.out.println(str.toCharArray().length);
于 2013-04-20T05:12:38.567 回答
0

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

"1234".split("(?!^)")
于 2018-03-06T18:58:06.317 回答
-1

我会这样做:

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

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

于 2013-04-20T05:18:48.907 回答