Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Ottenere stringa tra delimitatori particolari
Forum - Java - Ottenere stringa tra delimitatori particolari

Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 90
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 15:05
Giovedì, 03/03/2016
Ciao io avrei una stringa formata in questo tipo: campo1-campo2--campo4----campo8
Vorrei creare una sorta di funzione che mi restituisca i vari campi tra i "trattini", comprese le stringhe vuote dei campi non presenti.

P.S. Ho usato la funzione SPLIT ma mi restituisce un array dei soli valori esistenti quindi senza i valori non presenti

Ultima modifica effettuata da domenico_rizzo il 03/03/2016 alle 15:40
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 15:40
Giovedì, 03/03/2016
Mm, split è la funzione giusta da usare. In che senso non ti ritorna i valori non presenti?

Mostrarci il codice.


Il mio blog: https://piero.dev
PM Quote
Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 90
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 15:44
Giovedì, 03/03/2016
Ecco qui
Codice sorgente - presumibilmente Java

  1. String row = "campo1-campo2--campo4----campo8";
  2. String[] splits = row.split("-");


L'array contiene i 4 campi "non nulli" quando io in realtà vorrei un array dove in ogni sua posizione sia presente il proprio campo anche se nullo, in questo modo:
Codice sorgente - presumibilmente Plain Text

  1. splits[0] = "campo1";
  2. splits[1] = "campo2";
  3. splits[2] = "";
  4. splits[3] = "campo4";
  5. splits[4] = "";
  6. splits[5] = "";
  7. splits[6] = "";
  8. splits[7] = "campo8";


Ultima modifica effettuata da domenico_rizzo il 03/03/2016 alle 15:46
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:03
Giovedì, 03/03/2016
Eh, infatti split funziona proprio in questa maniera:

Codice sorgente - presumibilmente Java

  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class Ideone
  6. {
  7.         public static void main (String[] args) throws java.lang.Exception
  8.         {
  9.                 String row = "campo1-campo2--campo4----campo8";
  10.                 String[] splits = row.split("-");
  11.                 System.out.println(splits.length);
  12.                 for (String s : splits){
  13.                         System.out.println(s);
  14.                 }
  15.         }
  16. }



Output:

Testo quotato


8
campo1
campo2

campo4



campo8



Il mio blog: https://piero.dev
PM Quote
Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 90
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 16:16
Giovedì, 03/03/2016
@pierotofy A me non sembra funzionare al tuo stesso modo <.<
Provando con questa stringa: 1#2#3########
Mi stampa questo:
[1]
[2]
[3]

ed il codice per stampare è questo:
Codice sorgente - presumibilmente Java

  1. for (String ss : splits){
  2.                     System.out.println("["+ss+"]");
  3.             }


Non capisco perchè :noway: Non dovrebbe stamparmi [] per gli elementi vuoti??

P.S. la lunghezza di splits risulta essere 3 .-:_doubt:

Ultima modifica effettuata da domenico_rizzo il 03/03/2016 alle 16:54
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:36
Giovedì, 03/03/2016
Potresti postare il codice completo?


Il mio blog: https://piero.dev
PM Quote
Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 90
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 18:00
Giovedì, 03/03/2016
Eccoti qua (spero non sia troppo confusionario, ho messo commenti per aiutare):

Codice sorgente - presumibilmente Java

  1. public static void getDataByFile(String file_path) {//legge un file dove il suo path è passato come parametro
  2.         try {
  3.             BufferedReader in = new BufferedReader( new FileReader(file_path) );
  4.             DesEncrypter encrypter = new DesEncrypter( MWLogin.rna.getText().trim() );
  5.             String s = "";
  6.             while ((s = in.readLine()) != null) {
  7.                 String decrypted = encrypter.decrypt(s);
  8.                 fillArraylistWithStringFile( file_path, decrypted );
  9.             }
  10.             in.close();
  11.         } catch (Exception e) {}
  12.     }
  13.    
  14.     private static void fillArraylistWithStringFile(String file_path, String s){//riempie l'array corrispondente al path del file
  15.        
  16.         String[] splits = s.split(ARCHIVE_SEPARATOR);//archive_separator è il carattere separatore
  17.         if( file_path.equals(ALLEVATORI_FILE) ){
  18.                     System.out.println(s +" -> "+splits.length);
  19.             for (String ss : splits){
  20.                     System.out.println("["+ss+"]");
  21.             }
  22.             Main.allevatori.add( new Allevatore( splits[0], splits[1], splits[2], splits[3], splits[4], splits[5],
  23.                                                  splits[6], splits[7], splits[8], splits[9], splits[10]
  24.                                                )
  25.                                );
  26.         }
  27.     }


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:43
Giovedì, 03/03/2016
Per codice completo, si intende il codice minimo necessario per poter eseguire il programma e poter debuggare il programma... con due funzioni, senza files di input, come si puo' aiutare? Vabbe'...

Potresti fare un System.out.println di decrypted?


Il mio blog: https://piero.dev
PM Quote
Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 90
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 18:52
Giovedì, 03/03/2016
Testo quotato

Postato originariamente da pierotofy:

Per codice completo, si intende il codice minimo necessario per poter eseguire il programma e poter debuggare il programma... con due funzioni, senza files di input, come si puo' aiutare? Vabbe'...

Potresti fare un System.out.println di decrypted?



Dopo svariate prove ho risolto, bastava usare l'altro metodo String[] splits = row.split("-", 11); dove 11 è il numero di elementi che deve avere l'array, in questo modo mi conta anche le stringhe vuote date "dal valore vuoto". Grazie ancora per la disponibilità ;)

PM Quote