Using an alternative for a switch/state-based custom parser
Although you didn't share MatchReplacePair I assume it holds the Strings that were loaded from the file. So in fact you read all the file's contents into memory.  

Starting with Java 7, this can be achieved in one method call:

List&lt;String&gt; lines = Files.readAllLines(file.toPath());


then, you can skip the state machine implementation and just iterate over the list 

if (lines.size() % 3 != 0) {
   // Incorrect file contents
}
Iterator&lt;String&gt; itr = lines.iterator();
// the above check ensures you can iterate over three lines safely
while (itr.hasNext()) {
  itr.next(); // ignore separator line? or you can verify if you wish
  list.add(new MatchReplacePair(itr.next(), itr.next()));
}


This also eliminates the need for clone() which was used as constructor replacement.