Refactoring to use factory. This does two things. 1) use final instance variables, allowing us to reason more easily about this program. 2) takes the work out of the hand of the contstructor, more maintainable later. Also refactored Bug found by FoundBugs -- using File.separator in regex.