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!

Rispondi quotando