Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568

    [java] confronto stringhe



    devo confrontare 2 stringhe che rappresentano le versioni di un programma... come faccio a sapere quale è l'ultima ???

    es.

    1.4.1 > 1.3.10



    DATEMI UN IDEA VI PREGO !!!!!
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  2. #2
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    usi il metodo compareTo...

    codice:
    stringa.compareTo(anotherString);
    se il risultato è 0 sono uguali, se < 0 stringa precede anotherString, se > 0 al contrario...

    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  3. #3
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    grandissimo !!!!!!!!!!!!!!!!!!!!!

    ora faccio le prove...
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  4. #4
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    funziona !!!! GRAZIE 1000 mi hai risolto un bel problema...
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  5. #5
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    e di che???

    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  6. #6
    bhe io farei una semplice valutazione numerica:

    considera queste 2 opzioni:

    - la versione rispetta sempre lo stesso pattern (es. 1.1.0, 1.1.4, 1.2.0 )?

    -la versione non rispetta sempre lo stesso pattern (es. 1.1.0, 1.2.33, 1.3)

    nel primo caso è sufficiente fare una replaceAll del carattere "punto" con stringa vuota, convertire in intero e vedere il maggiore.

    nel secondo caso (più probabile) io direi di procedere così:

    split delle stringhe per il carattere punto

    es.
    codice:
    a = "1.2.27" e  b = "1.3.0"
    splittate diventano 2 array come di seguito

    codice:
    String aa = a.split("\\.");
    String bb = b.split("\\.")
    aa[0]="1"
    aa[1]="2"
    aa[2]="27"
    
    bb[0]="1"
    bb[1]="3"
    bb[2]="0"
    poi, confronti le lunghezze degli array ed iteri SOLO fino alla lunghezza dell'array più corta, salvo un caso particolare che vedremo fra poco

    codice:
    int lunghezzaMinima = aa.length < bb.length ? aa.length : bb.length;
    
    boolean aaMaggioreDiBb = false
    boolean bbMaggioreDiAa = false
    
    for(int i=0; i < lunghezzaMinima; i++)
    {
      qui dentro confronti le versioni dal numero più significativo al meno significativo (ad ogni ciclo hai il numero meno significativo):
      
      int numAa = Integer.parseInt(aa[i]);
      int numBb = Integer.parseInt(bb[i]);
    
      ora il loop continua solo se i numeri sono uguali
    
      if(numAa > numBb)
      {
        aaMagioreDiBb = true;
        break;
      }
      else if(numBb > numAa)
      {
        bbMaggioreDiAa = true;
        break;
      }
    }
    ora ti basta testare se uno dei 2 boolean è true, nel qual caso già sai quale è il maggiore.
    in caso fossero entrambi false, c'è ancora la famosa possibilità che abbiano lunghezze diverse, ti basterà quindi fare così:

    codice:
    if(!aaMaggioreDiBb && !bbMaggioreDiAa)
    {
      aaMaggioreDiBb = (aa.length > bb.length);
      bbMaggioreDiAa = (bb.length > aa.length);
    }
    a questo punto, se sono entrambe false le versioni sono uguali, altrimenti già lo sai


    p.s. occhio che non ci siano scritte tipo "alpha, beta, pre, rc ecc..."
    Ci sono cose che non si possono sapere. Per tutto il resto c'è man

    Prima di fare domande stupide: 1) googla 2) leggi le manpages 3) sparati.

  7. #7
    Originariamente inviato da byaur
    usi il metodo compareTo...

    codice:
    stringa.compareTo(anotherString);
    se il risultato è 0 sono uguali, se < 0 stringa precede anotherString, se > 0 al contrario...


    non credo sia giusto:

    http://java.sun.com/j2se/1.4.2/docs/...html#compareTo(java.lang.String)

    come da manuale, il compareTo confronta i valori unicode dei caratteri che compongono la stringa... quindi se uno ha 1.11.1 e 1.1.1.1 in realtà ti valuta il "punto" come carattere, che nell'indice unicode ha una sua posizione che non c'entra niente con i numeri di versione, quindi ti sballa il confronto
    Ci sono cose che non si possono sapere. Per tutto il resto c'è man

    Prima di fare domande stupide: 1) googla 2) leggi le manpages 3) sparati.

  8. #8
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    si infatti la soluzione per cui stavo optando era quella dello split..
    ma la soluzione di byaur risparmia un bel po' di codice !!!
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  9. #9
    Originariamente inviato da morphy79
    si infatti la soluzione per cui stavo optando era quella dello split..
    ma la soluzione di byaur risparmia un bel po' di codice !!!
    risparmi codice ma scrivi una cosa che non funziona.. se il tuo scopo è quello

    la soluzione dello split è una delle 2 soluzioni possibili, si potrebbe fare anche con le regexp, scriveresti anche meno righe ma te le dovresti studiare prima...


    fai una prova, guarda

    codice:
    package test;
    
    public class GenericTest
    {
    
      public static void main(String[] args)
      {
    
        String v1 = "10.4.3.2";
        String v2 = "1.4.3.22";
        
        System.out.println("COMPARE = " + v1.compareTo(v2));
        
      }
    
    }

    ti restituirà 2, come se v2 fosse maggiore di v1

    ed è sbagliato.
    Ci sono cose che non si possono sapere. Per tutto il resto c'è man

    Prima di fare domande stupide: 1) googla 2) leggi le manpages 3) sparati.

  10. #10
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    certo la soluzione con split è + completa sopratutto se il pattern delle 2 stringhe è diverso...io ho optato semplicemente per il compareTo perchè ho intuito che le stringhe di versione fossero sempre dello stesso pattern che so
    XX.XX.XX dove X sono cifre... in questo caso compareTo funziona

    cmq ti consiglio anche io split e valutazione numerica come ha detto stai_tranquillo

    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

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.