具有正则表达式和限制的String.split没有预期的行为

时间:2017-06-29 19:34:49

标签: java split

我正在研究一个简单的小工具,它通过在xpath中找到“/”并使用java的split方法将特定元素的xpath分成更小的部分。我的代码如下:

String test = "/html[1]/body[1]/div[1]/div[7]/div[3]/form[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[2]/a[1]";
String[] split = test.split("/");
for (int i = 0; i < split.length; i++) {
  System.out.println(split[i]);
}

它有效,我得到了结果:

html[1]
body[1]
div[1]
div[7]
div[3]
form[1]
div[1]
div[1]
div[1]
div[2]
div[1]
div[2]
a[1]

但是,我决定将xpath拆分为2个由xpath中的第一个“/”分隔的部分。我使用带有正则表达式和限制的split方法,我将代码更改为:

 String test = "/html[1]/body[1]/div[1]/div[7]/div[3]/form[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[2]/a[1]";
 String[] split = test.split("/",2);
 for (int i = 0; i < split.length; i++) {
   System.out.println(split[i]);
 }

它不起作用,并给出结果:

html[1]/body[1]/div[1]/div[7]/div[3]/form[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[2]/a[1]

感谢melli-182的评论,我意识到它实际上是将字符串分成空字符串和原始字符串,这不是我所期望的。有没有办法让它正常工作?

非常感谢!

2 个答案:

答案 0 :(得分:0)

分割功能正常,结果在Split Documentation

上得到尊重和陈述

考虑到第二种情况下的分割字符串是两个,第一个是空字符串(因为“/”之前没有任何内容),第二个字符串是你共享的字符串。

答案 1 :(得分:0)

我认为你的分裂工作正常。应该打印一个空行。
test字符串中的第一个字符是'/',它将在“”和“html ...”中分割。
试试split("/", 3)它应该给你“”,“html [1]”和“body [1] .....”