Java与JavaScript分裂行为

时间:2015-07-28 08:14:18

标签: javascript java split

Java和JavaScript之间的拆分功能似乎有所不同。

我不需要匹配某个正则表达式标准,或者使用 基于前瞻性的正则表达式。我的问题在于,在分割正则表达式的最终匹配之后跟踪空匹配(这是一组简单的字符,而不是表达式)。

下面是我想要实现的输出示例以及我真正得到的内容。

爪哇

("~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~").split("~#~")

/* results with an array of length 8 */ (java.lang.String[]) [, , , A, B, C, D, E]

的Javascript

 "~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~".split("~#~")
 /* results with an array of length 11 */ ["", "", "", "A", "B", "C", "D", "E", "", "", ""]

我真的无法解释这个问题,因为我正在使用Java应用程序而且分裂给我带来了麻烦,我希望得到与JavaScript相同的结果。我怎么能得到它?

3 个答案:

答案 0 :(得分:30)

split(String regex)上的Javadoc:

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,尾随空字符串不包含在结果数组中。

split(String regex, int limit)上的Javadoc:

  

如果n是非正数,那么模式将被应用尽可能多次,并且数组可以具有任何长度。如果n为零,那么模式将被应用尽可能多次,数组可以具有任何长度,并且尾随空字符串将被丢弃。

所以... split("~#~", -1)应该可以解决问题。

答案 1 :(得分:7)

Java的split()文档明确提到不会包含尾随的空字符串。

  

此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。尾随空   因此,字符串不包含在结果数组中。

但你可以通过

来实现它
("~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~").split("~#~" , -1)

这是一个重载方法

答案 2 :(得分:1)

Java的split()文档明确提到尾随的空字符串将 NOT 包含在内。

  

此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。 尾随空   因此,字符串不包含在结果数组中