Program: 9907
Project: 9907
Buggy source:
public static void main(String[] args) throws IOException {
  Logger.getRootLogger().setLevel(Level.WARN);
  if (!dbpediaFile.exists() || regenerateFile) {
    createDBpediaFile();
  }
  for (  POIClass poiClass : POIClass.values()) {
    matchPerClass.put(poiClass,0);
    noMatchPerClass.put(poiClass,0);
  }
  Files.clearFile(matchingFile);
  Files.clearFile(missesFile);
  FileOutputStream fos=new FileOutputStream(matchingFile,true);
  FileOutputStream fosMiss=new FileOutputStream(missesFile,true);
  BufferedReader br=new BufferedReader(new FileReader(dbpediaFile));
  String line;
  int itemCount=0;
  URI uri=null;
  String label=null;
  String[] classes=null;
  int decimalCount=0;
  Double geoLat=null;
  Double geoLong=null;
  startDate=new Date();
  System.out.println("String_Node_Str" + startDate);
  while ((line=br.readLine()) != null) {
    if (line.isEmpty()) {
      DBpediaPoint dp=new DBpediaPoint(uri,label,classes,geoLat,geoLong,decimalCount);
      POIClass poiClass=dp.getPoiClass();
      if (poiClass != null) {
        URI matchURI=findGeoDataMatch(dp);
        if (matchURI == null) {
          String missStr=dp.toString() + "String_Node_Str";
          fosMiss.write(missStr.getBytes());
          noMatchPerClass.put(poiClass,noMatchPerClass.get(poiClass) + 1);
        }
 else {
          String matchStr="String_Node_Str" + dp.getUri() + "String_Node_Str"+ matchURI+ "String_Node_Str";
          fos.write(matchStr.getBytes());
          matches++;
          matchPerClass.put(poiClass,matchPerClass.get(poiClass) + 1);
        }
        counter++;
        if (counter % 1000 == 0) {
          printSummary();
        }
      }
 else {
        skipCount++;
      }
      itemCount=0;
    }
 else {
switch (itemCount) {
case 0:
        uri=URI.create(line);
      break;
case 1:
    label=line;
  break;
case 2:
classes=line.substring(1,line.length()).split("String_Node_Str");
break;
case 3:
geoLat=new Double(line);
if (geoLat.toString().contains("String_Node_Str")) {
geoLat=0.0;
}
decimalCount=0;
String[] tmp=line.split("String_Node_Str");
if (tmp.length == 2) {
decimalCount=tmp[1].length();
}
break;
case 4:
geoLong=new Double(line);
if (geoLong.toString().contains("String_Node_Str")) {
geoLong=0.0;
}
}
itemCount++;
}
}
br.close();
fos.close();
printSummary();
System.out.println("String_Node_Str");
}

Fixed version (ground truth):
public static void main(String[] args) throws IOException {
  Logger.getRootLogger().setLevel(Level.WARN);
  if (!dbpediaFile.exists() || regenerateFile) {
    createDBpediaFile();
  }
  for (  POIClass poiClass : POIClass.values()) {
    matchPerClass.put(poiClass,0);
    noMatchPerClass.put(poiClass,0);
  }
  Files.clearFile(matchingFile);
  Files.clearFile(missesFile);
  FileOutputStream fos=new FileOutputStream(matchingFile,true);
  FileOutputStream fosMiss=new FileOutputStream(missesFile,true);
  BufferedReader br=new BufferedReader(new FileReader(dbpediaFile));
  String line;
  int itemCount=0;
  URI uri=null;
  String label=null;
  String[] classes=null;
  int decimalCount=0;
  Double geoLat=null;
  Double geoLong=null;
  startDate=new Date();
  System.out.println("String_Node_Str" + startDate);
  while ((line=br.readLine()) != null) {
    if (line.isEmpty()) {
      DBpediaPoint dp=new DBpediaPoint(uri,label,classes,geoLat,geoLong,decimalCount);
      POIClass poiClass=dp.getPoiClass();
      if (poiClass != null) {
        URI matchURI=findGeoDataMatch(dp);
        if (matchURI == null) {
          String missStr=dp.toString() + "String_Node_Str";
          fosMiss.write(missStr.getBytes());
          noMatchPerClass.put(poiClass,noMatchPerClass.get(poiClass) + 1);
        }
 else {
          String matchStr="String_Node_Str" + dp.getUri() + "String_Node_Str"+ matchURI+ "String_Node_Str";
          fos.write(matchStr.getBytes());
          matches++;
          matchPerClass.put(poiClass,matchPerClass.get(poiClass) + 1);
        }
        counter++;
        if (counter % 1000 == 0) {
          printSummary();
        }
      }
 else {
        skipCount++;
      }
      itemCount=0;
    }
 else {
switch (itemCount) {
case 0:
        uri=URI.create(line);
      break;
case 1:
    label=line;
  break;
case 2:
line=line.substring(1,line.length() - 1);
if (line.length() > 1) {
classes=line.split("String_Node_Str");
}
 else {
classes=new String[0];
}
break;
case 3:
geoLat=new Double(line);
if (geoLat.toString().contains("String_Node_Str")) {
geoLat=0.0;
}
decimalCount=0;
String[] tmp=line.split("String_Node_Str");
if (tmp.length == 2) {
decimalCount=tmp[1].length();
}
break;
case 4:
geoLong=new Double(line);
if (geoLong.toString().contains("String_Node_Str")) {
geoLong=0.0;
}
}
itemCount++;
}
}
br.close();
fos.close();
printSummary();
System.out.println("String_Node_Str");
}