「\」を使用してコマンドを複数行に拡張できるコマンドをキャプチャしようとしています。したがって、可能な区切り文字は次のとおりです。
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 を返します。誰でもこの奇妙な動作を説明できますか?