Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [JAVA] metodo split

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726

    [JAVA] metodo split



    domanda veloce veloce:
    devo dividere una stringa ogni qual volta incontro un carattere ":" e mettere ogni sottostringa in un vettore.
    Per far ciò avevo pensato di usare il metodo split di String (o al limite la classe StringTokenizer).
    Dal momento che però la stringa che devo andare a dividere deve essere costituita in un certo modo, e deve contenere solo un certo numero di ":", devo anche analizzare i casi in cui la stringa non sia corretta.

    Ad esempio: "000:ciao:123456" è corretta perchè contiene 2 ":" e 3 valori, mentre "000:ciao:123456:" non lo e' perchè contiene 3 ":".
    Se però faccio lo split per "000:ciao:123456:" risulta che ho sempre la stringa divisa in 3, e non in 4 come mi aspetterei.

    Cosa posso fare?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] metodo split

    Originariamente inviato da Downloader
    Per far ciò avevo pensato di usare il metodo split di String (o al limite la classe StringTokenizer).
    Occhio solo alla differenza concettuale tra uno split e un StringTokenizer. Il caso della differenza tra i due lo vedresti bene se avessi: ":aa:bb" (con : come delimitatore). Con split ottieni { "", "aa", "bb" } (nota la prima stringa vuota) mentre con StringTokenizer solo { "aa", "bb" }. split "separa" mentre StringTokenizer "salta" i delimitatori.

    Originariamente inviato da Downloader
    Dal momento che però la stringa che devo andare a dividere deve essere costituita in un certo modo, e deve contenere solo un certo numero di ":", devo anche analizzare i casi in cui la stringa non sia corretta.
    Se devi anche eventualmente validare il contenuto (tipo es. il primo token deve contenere solo digit) allora potresti sfruttare sempre le espressioni regolari ma usando Pattern/Matcher in modo da matchare il pattern completo di tutta la stringa e poi estrarre le singole parti con dei "gruppi". Ma devi comunque valutarlo tu, se ti può essere utile/comodo o no.

    Originariamente inviato da Downloader
    Se però faccio lo split per "000:ciao:123456:" risulta che ho sempre la stringa divisa in 3, e non in 4 come mi aspetterei.
    Lo split(String regex) invoca l'altro split(String regex, int limit) passando 0 come limit.
    E la documentazione dice chiaramente: If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.

    Ma basta usare un qualunque valore negativo e sfruttare l'altra funzionalità del limit: If n is non-positive then the pattern will be applied as many times as possible and the array can have any length.
    In questo caso non elimina le stringhe vuote finali. Quindi devi usare:

    split(":", -1)

    e in quel caso avrai 4 stringhe.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Perfetto.
    Grazie 1000.

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.