我在其中一个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()对直接索引及其运行时行为的行为。
答案 0 :(得分:0)
执行以下行后,字符串标记macroToken
将被覆盖。
macroToken = macroToken.split("-->")[1];
因此,您无法再为System.out.prinln()
回答这个问题,如果用split()
方法来切断Java中的字符串,那么在split()
中使用的匹配字符串的情况下会有空字符串。在这里,您匹配起始字符串" - >"因此,
[0] =""
[1] ="在"