Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Problemi trasformazione stringa in array

    Ciao a tutti!! ho una stringa, recuperata da un DB fatta così:
    codice:
    1;2;;|;3;;|;;4;|;;;5|;;;6|;;5;
    devo trasformarla in una matrice double[][] fatta così
    codice:
    1 2 0 0
    0 3 0 0
    0 0 4 0
    0 0 0 5
    0 0 0 6
    0 0 5 0
    ho creato una funzione così fatta
    codice:
    public static double[][] conversione2D(String a,String carattere,String car){
            String array[] = a.split(car);
            int misura = array.length;
            System.out.println("La Z:" + misura);
            System.out.println("Il carattere:" + carattere);
            int misura2 =array[0].split(carattere).length;
            System.out.println("La X:" + misura2);
            double out[][]  = new double[misura][misura2];
            for(int i=0;i<misura;i++){
                String x[] = array[i].split(carattere);
                System.out.println("La lunghezza:" + x.length);
                for(int j=0;j<x.length;j++){
                    if(!x[j].isEmpty()){
                        out[i][j] = Double.parseDouble(x[j]);
                    } else out[i][j]=0;
                }
                }
    Ma non funziona, mi ritorna una ArrayIndexOutOfBoundsException,
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
    	at wave.simulator.tabelle.DB.conversione2D(DB.java:191)
    	at wave.simulator.Inter_importazione.importa(Inter_importazione.java:182)
    	at wave.simulator.Inter_importazione.save(Inter_importazione.java:104)
    	at wave.simulator.Inter_importazione.access$000(Inter_importazione.java:22)
    	at wave.simulator.Inter_importazione$1.actionPerformed(Inter_importazione.java:72)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.Component.processMouseEvent(Component.java:6504)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    	at java.awt.Component.processEvent(Component.java:6269)
    	at java.awt.Container.processEvent(Container.java:2229)
    	at java.awt.Component.dispatchEventImpl(Component.java:4860)
    	at java.awt.Container.dispatchEventImpl(Container.java:2287)
    	at java.awt.Component.dispatchEvent(Component.java:4686)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    	at java.awt.Container.dispatchEventImpl(Container.java:2273)
    	at java.awt.Window.dispatchEventImpl(Window.java:2713)
    	at java.awt.Component.dispatchEvent(Component.java:4686)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    	at java.awt.EventQueue.access$000(EventQueue.java:101)
    	at java.awt.EventQueue$3.run(EventQueue.java:666)
    	at java.awt.EventQueue$3.run(EventQueue.java:664)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    	at java.awt.EventQueue$4.run(EventQueue.java:680)
    	at java.awt.EventQueue$4.run(EventQueue.java:678)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Per favore aiutatemi!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Problemi trasformazione stringa in array

    Originariamente inviato da Lory1990
    Ciao a tutti!! ho una stringa, recuperata da un DB fatta così:
    codice:
    1;2;;|;3;;|;;4;|;;;5|;;;6|;;5;
    devo trasformarla in una matrice double[][] fatta così
    codice:
    1 2 0 0
    0 3 0 0
    0 0 4 0
    0 0 0 5
    0 0 0 6
    0 0 5 0
    ho creato una funzione così fatta
    codice:
    public static double[][] conversione2D(String a,String carattere,String car){
            String array[] = a.split(car);
            int misura = array.length;
            System.out.println("La Z:" + misura);
            System.out.println("Il carattere:" + carattere);
            int misura2 =array[0].split(carattere).length;
            System.out.println("La X:" + misura2);
            double out[][]  = new double[misura][misura2];
            for(int i=0;i<misura;i++){
                String x[] = array[i].split(carattere);
                System.out.println("La lunghezza:" + x.length);
                for(int j=0;j<x.length;j++){
                    if(!x[j].isEmpty()){
                        out[i][j] = Double.parseDouble(x[j]);
                    } else out[i][j]=0;
                }
                }
    Ma non funziona, mi ritorna una ArrayIndexOutOfBoundsException,
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
    	at wave.simulator.tabelle.DB.conversione2D(DB.java:191)
    	at wave.simulator.Inter_importazione.importa(Inter_importazione.java:182)
    	at wave.simulator.Inter_importazione.save(Inter_importazione.java:104)
    	at wave.simulator.Inter_importazione.access$000(Inter_importazione.java:22)
    	at wave.simulator.Inter_importazione$1.actionPerformed(Inter_importazione.java:72)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.Component.processMouseEvent(Component.java:6504)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    	at java.awt.Component.processEvent(Component.java:6269)
    	at java.awt.Container.processEvent(Container.java:2229)
    	at java.awt.Component.dispatchEventImpl(Component.java:4860)
    	at java.awt.Container.dispatchEventImpl(Container.java:2287)
    	at java.awt.Component.dispatchEvent(Component.java:4686)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    	at java.awt.Container.dispatchEventImpl(Container.java:2273)
    	at java.awt.Window.dispatchEventImpl(Window.java:2713)
    	at java.awt.Component.dispatchEvent(Component.java:4686)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    	at java.awt.EventQueue.access$000(EventQueue.java:101)
    	at java.awt.EventQueue$3.run(EventQueue.java:666)
    	at java.awt.EventQueue$3.run(EventQueue.java:664)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    	at java.awt.EventQueue$4.run(EventQueue.java:680)
    	at java.awt.EventQueue$4.run(EventQueue.java:678)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Per favore aiutatemi!!
    Dicci la linea che solleva l'eccezione.

  3. #3
    è proprio questa:
    codice:
     out[i][j] = Double.parseDouble(x[j]);

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Spezzando l'istruzione in 3 parti distinte puoi capire qual è l'indice che va oltre l'ultimo elemento.

  5. #5
    penso di aver trovato il problema:
    la stringa "1;2;;" ha lunghezza 2
    la stringa ";3;;" ha lunghezza 2
    la stringa ";;4;" ha lunghezza 3

    e così via, in pratica split non riconosce ;; come un valore ma lo salta di brutto, secondo me si potrebbe tentare di convertire la stringa 1;2;; in "1;2; ; " che ha lunghezza 4

  6. #6
    Sai che split vuole una regular expression come delimitatrice degli elementi, vero?

    Quindi per splittare l'array divisi da "|" devi passare "\\|" come parametro per fare l'escape di | che altrimenti vede come regexp.
    lolide
    Java Programmer

    Informati

  7. #7
    si si l'avevo visto e per ovviare ho sostituito le , alle |

  8. #8
    Originariamente inviato da Lory1990
    penso di aver trovato il problema:
    la stringa "1;2;;" ha lunghezza 2
    la stringa ";3;;" ha lunghezza 2
    la stringa ";;4;" ha lunghezza 3

    e così via, in pratica split non riconosce ;; come un valore ma lo salta di brutto, secondo me si potrebbe tentare di convertire la stringa 1;2;; in "1;2; ; " che ha lunghezza 4
    Si infatti split non tiene le stringhe vuote.
    Devi definire un valore che intendi come nullo, magari "null" o uno spazio come dici tu, come vuoi....
    lolide
    Java Programmer

    Informati

  9. #9

    [Risolto] Risolto

    Allora ho risolto il problema semplicemente con un replace da ";" a "; " e tutto funziona.
    Posto la funzione completa:

    codice:
    public static double[][] conversione2D(String a,String carattere,String car){
                String array[] = a.split(car);
                int misura = array.length;
                String mis = array[0].replace(carattere,carattere+" ");
                int misura2 = mis.split(carattere).length;
                double out[][]  = new double[misura][misura2];
                for(int i=0;i<misura;i++){
                    String x[] = array[i].replace(carattere,carattere+" ").split(carattere);
                    for(int j=0;j<misura2;j++){
                            try{
                                out[i][j] = Double.parseDouble(x[j]);
                            }catch (Exception e){
                                out[i][j]=0;
                            }
                    }
                }
                return out;
        }
    Ed anche un'altra per la conversione di stringhe in array double ad 1D

    codice:
    public static double[] conversione(String a,String carattere){
                a = a.replace(carattere, carattere+" ");
                String array[] = a.split(carattere);
                int misura = array.length;
                double out[]  = new double[misura];
                for(int i=0;i<misura;i++){
                    try{out[i] = Double.parseDouble(array[i]);
                    }catch (Exception e){ out[i]=0;}
                }
                return out;
            }

  10. #10
    Hai scelto una soluzione abbastanza costosa in termini di memoria e cmq non credo funzioni.

    Quando la stringa è "23; 4; ; ", dopo lo split, il parse di " 4" darebbe errore...
    lolide
    Java Programmer

    Informati

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.