split()方法用于砍掉初始字符串的并发症

时间:2016-05-03 06:49:46

标签: java split

我在其中一个TDD测试驱动开发项目中为我的SQL文件进行了宏处理。

  

- >是宏标记

我使用过\ p {space} + posix标准正则表达式分割。

sqlLine.split("\\p{space}+");

在这种情况下,Macro必须在空格后启动。只有这样我的分裂才有效。因此我添加了处理NoSpaceInMacroStartup案例。虽然我这样做,但我观察到分裂在尊重System.out.println()和直接索引方面表现不同。

macroToken = macroToken.split("-->")[1]; //gives the first token after markup

//But While I examine

//gives the first token after markup
System.out.println("[0]->"+macroToken.split("-->")[0]) 

//And next index throws exception
System.out.println("[1]->"+macroToken.split("-->")[1]) 

我想知道为什么分裂表现不同。

我在调试模式下检查以下行。

macroToken = macroToken.split(" - >") [1];

  

[0] =""

     

[1] ="在"

由于这种差异,我使用了 -

macroToken = macroToken.replaceFirst("-->","");

有人请解释split()对直接索引及其运行时行为的行为。

1 个答案:

答案 0 :(得分:0)

执行以下行后,字符串标记macroToken将被覆盖。

macroToken = macroToken.split("-->")[1];

因此,您无法再为System.out.prinln()

获取相同的索引集

回答这个问题,如果用split()方法来切断Java中的字符串,那么在split()中使用的匹配字符串的情况下会有空字符串。在这里,您匹配起始字符串" - >"因此,

  

[0] =""

     

[1] ="在"