Java Scanner获取下一个分隔符

时间:2013-01-23 20:42:30

标签: java regex java.util.scanner

我正在尝试捕获命令,其中'\'可用于将命令扩展到多行。因此,可能的分隔符可以是:

Pattern assignment = Pattern.compile("[^\\\\]\\n");

当然,这有一个问题就是在'\ n'之前切断最后一个非'\'字符。我试图通过尝试以下方法来恢复该角色:

由于扫描仪的输入形式为:T1 D1 T2 D2 T3 D3 ....其中T#和D#分别对应于令牌和分隔符号'#',我认为这样可行:

Pattern p = Pattern.compile("\\\\?\\s+");

String residue = file.findInLine(assignment);
String curToken = file.next().trim();

if(residue == null)
   residue = "";
else
   residue = residue.trim();

Scanner tokens = new Scanner(curToken + residue).useDelimiter(p);

而不是获得T1和D1的串联,findInLine,它应该忽略扫描器的分隔符,当模式与分隔符相同时返回null!任何人都可以解释这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:0)

想出如何获得我想要的行为,但我仍然不明白为什么我的尝试不起作用。

解决方案是使用负面后卫,它不消耗非'\':

Pattern assignment = Pattern.compile("(?<!\\\\)\\n");