Newsgroup: it.comp.java
Titolo: splitter WAS array di stringhe

Vi chiedo scusa se riprendo l'argomento. Sto tentando di fare uno 
splitter, ma ho un problema. Cominciamo con la funzione split():
public String[] split(String row, String delim){
     StringTokenizer st = new StringTokenizer(row,delim);
     String splitted[]=new String[st.countTokens()];
     for (int j=0;st.hasMoreTokens();j++){
         splitted[j]=new String(st.nextToken());
     }
     return splitted;
}
Questa funzione va DA DIO!!! Tranne in un caso... quando cioč si arriva 
in fondo alla riga da splittare non capisce dove deve finire!!!
Le righe sono del tipo
Codart;Descr;UnitaMisura;IVA;P/c;Cessione;Vendita consigliata;Cod barre 
pezzo
Come vedete il campo codice barre pezzo non č chiuso da ";", ed ogni 
tanto StringTokenizer si incazza dicendomi (quando si cerca di leggere 
l'ultimo token dall'array restituito)
java.lang.ArrayIndexOutOfBoundsException: 1728227976
Per ogni tanto intendo quando nella riga il codice a barre non č stato 
in effetti scritto. Al suo posto ho bisogno di scrivere una stringa nulla.
Io immagino che nel tentativo di leggere l'ultimo token la mia funzione 
vada avanti fino a dove riesce dopodichč mi dica "oh dario io non ce la 
faccio piů", ma non capisco come mai si comporti cosě. Non dovrebbe al 
limite crearmi un elemento in meno nell' array di stringhe? Come posso 
fare x mettere a posto la situazione? Ciao a tutti e grazie


Ciao,
il problema non č di sicuro nel tokenizer(non č necessario un 
delimitatore alla fine) bensi, credo, nel codice che utilizza l'array 
che restituisci. Probabilmente non č in grado di gestire un array con 
dimensione minore a 8 elementi(nel caso ad esempio dove non c'č codice a 
barre) anche se non capisco come mai nell'eccezione dice di voler 
accedere all'indice 1728227976. Mi sarei piuttosto atteso qualche cosa tipo
java.lang.ArrayIndexOutOfBoundsException: 7
Bho, senza il codice non posso aiutare di +.
Marco

  > Bho, senza il codice non posso aiutare di +.
Oh beh allora ecco:
private String[] splittedRow=null;
splittedRow=Splitter.split(bufferFileReader.readLine(),";");
for(int j=0;i<splittedRow.length;j++){
	JOptionPane.showMessageDialog(null,""+splittedRow[j]);
}
Tutto qui, volevo solo leggere il token usando il metodo della classe 
statica Splitter (che ho fatto io). Ho notato una cosa, se io uso uso 
una forma condizionale prima della stampa su JOptionPane, cioè ad es 
invece di
for(int j=0;i<splittedRow.length;j++){
JOptionPane.showMessageDialog(null,""+splittedRow[j]);
}
uso questo
for(int j=0;i<splittedRow.length;j++){
if (j==7&&splittedRow[j].length()>13){ //13 = lunghezza del codice
				       // a barre
				       //7= posiz. del barcode
				       //nell'array splittedRow
     	JOptionPane.showMessageDialog(null,"");
}else {
     JOptionPane.showMessageDialog(null,""+  splittedRow[j]);
}
}
Il risultato restituito sarà
java.lang.ArrayIndexOutOfBoundsException: 0
al posto di
java.lang.ArrayIndexOutOfBoundsException: 1728227976
questo vi dice qualcosa???O_o
Boh, non capisco, VI PREGO HELP ME!!! Ciao e grazie

 
Scusa ma i cosa c'entra?
Marco


AAAAAAAAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!!!!!!!!!!!
vado e mi butto da un ponte... grazie, mi hai salvato!
Ciao
figura di merda...

mwen wrote:

Buon bagno, attento all'acqua bassa :)
Marco