Спасибо за ответы, ребята. Наконец-то нашел проблему.
Я заменил
Pattern ptr=Pattern.compile("[\\\\/]+");
с
Pattern ptr=Pattern.compile("[\\\\\\\\|/]+");
как отметил tchrist, это было необходимо, но все равно не исправило ошибку.
Ошибка была исправлена заменой
return mtr.replaceAll(File.separator);
строка с
return mtr.replaceAll(File.separator+""+File.separator);
Так как я работаю в среде Windows, File.separator
вернул "\", который сам по себе работал как символ экранирования, и была отображена ошибка, и именно поэтому оригинальный код прекрасно работал на Mac Джима Блэклера, потому что File.separator
для него не было "\".
Но все же я не мог понять, за исключением StringIndexoutOfBounds
, что здесь должно делать это исключение.