Buongiono a tutti,
ho un problema con una classe java per la lettura di un file gml.Devo individuare al suo interno 'nodi' e 'archi', ho trovato alcuni esempi e ho creato una classe ReadGml ma quando la metto in esecuzione mi da come errore:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at editor.ReadFile.getNodes(ReadFile.java:46)
at editor.ReadFile.main(ReadFile.java:77)
Non riesco a capire dove sia l'errore spero che qualcuno possa aiutarmi.
Posto qua sotto il codice:
codice:
package editor;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReadGml {
private String filename;
public ReadGml(String filename){
this.filename = filename;
}
public String read() throws IOException{
byte[] encodedFile = Files.readAllBytes(Paths.get(filename));
return new String(encodedFile, Charset.forName("ASCII"));
}
public ArrayList<String> getNodes(String content){
ArrayList<String> nodeList = new ArrayList<String>();
String nodePattern = "(id)\\s*[0-9]*";
Pattern regex = Pattern.compile(nodePattern);
Matcher match = regex.matcher(content);
while(match.find()){
String line = match.group(0);
nodeList.add(line.split(" ")[1].trim());
}
return nodeList;
}
public ArrayList<String> getEdges(String content){
ArrayList<String> edgeList = new ArrayList<String>();
String nodePattern = "(source)[\\s]*[\\d]*[\\s]*(target)[\\s]*[\\d]*";
Pattern regex = Pattern.compile(nodePattern);
Matcher match = regex.matcher(content);
while(match.find()){
String line = match.group(0);
line = line.replaceAll("( )+"," ");
String[] arr = line.split(" ");
edgeList.add(arr[1].trim()+","+arr[3].trim());
}
return edgeList;
}
public static void main(String[] args) throws IOException{
ReadGml readGml = new ReadGml( "prova.gml");
String content = readGml.read();
ArrayList<String> nodes = readFile.getNodes(content);
ArrayList<String> edges = readFile.getEdges(content);
for(String node:nodes){
System.out.println("Node:"+node);
}
for(String edge:edges){
System.out.println("Edge:"+edge);
}
}
}
Grazie in anticipo a chiunque possa aiutarmi!