1 package net.bmahe.genetics4j.samples; 2 3 import java.io.BufferedReader; 4 import java.io.FileReader; 5 import java.io.IOException; 6 import java.nio.charset.StandardCharsets; 7 import java.util.ArrayList; 8 import java.util.HashMap; 9 import java.util.List; 10 import java.util.Map; 11 12 public class TSPLIBParser { 13 14 public TSPLIBParser() { 15 } 16 17 TSPLIBProblem parse(final String filename) throws IOException { 18 19 final FileReader fileReader = new FileReader(filename, StandardCharsets.UTF_8); 20 21 final Map<String, String> attributes = new HashMap<String, String>(); 22 final List<Position> cities = new ArrayList<Position>(); 23 24 try (final BufferedReader bufferReader = new BufferedReader(fileReader)) { 25 26 boolean parsingHeaders = true; 27 String line; 28 while ((line = bufferReader.readLine()) != null) { 29 System.out.println(line); 30 31 if ("NODE_COORD_SECTION".equals(line)) { 32 parsingHeaders = false; 33 } else if ("EOF".equals(line)) { 34 35 } else if (parsingHeaders) { 36 final String[] strings = line.split(": ", 2); 37 attributes.put(strings[0], strings[1]); 38 } else { 39 final String[] strings = line.split("\\s"); 40 cities.add(new Position(Double.parseDouble(strings[1]), Double.parseDouble(strings[2]))); 41 } 42 43 } 44 } 45 return new TSPLIBProblem(attributes, cities); 46 } 47 }