Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2018
    Messaggi
    2

    creare stringa java da file

    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!
    Ultima modifica di LeleFT; 13-12-2018 a 11:19 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sposto nel forum dedicato a Java.
    Inoltre ho aggiunti i tag CODE, da usarsi per il codice (tasto '#' nell'editor dei messaggi).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    1) L'errore riguarda una classe ReadFile, mentre tu hai postato una classe che si chiama ReadGm1 (ok, l'hai rinominata... rendi coerenti anche i messaggi, allora).

    2) La tua RegEx "(id)\\s*[0-9]*" nel metodo getNodes() ammette anche stringhe che non hanno alcuno spazio tra "(id)" e l'eventuale numero. Di conseguenza, dopo aver splittato usando lo spazio come separatore devi accertarti che l'array risultante abbia effettivamente almeno 2 elementi prima di poter accedere al secondo. Evidentemente nel file che stai leggendo esistono stringhe che iniziano con "(id)" ma che non hanno alcuno spazio dopo (o non hanno proprio nulla dopo).

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.