Da String ad Integer e viceversa, passando per substring() o altro

di il
11 risposte

Da String ad Integer e viceversa, passando per substring() o altro

Salve,
gradirei un'opinione da voi esperti.

Mi viene passata una matricola di tipo String composta da 5 caratteri, i primi 2 sono lettere mentre gli altri 3 numeri.
Per ogni matricola presa in ingresso devo restituire la stessa +1. Quindi AA987 diventerà AA988.

Ho pensato:
prendo la stringa e con il substring() ricavo una sottostringa x composta dai 3 caratteri numerici, quindi
Integer intero = Integer.valueOf(x);
x+=1;
a questo punto deve tornare ad essere una stringa, con il suo prefisso originale:
String finale="AA"+x;
Vi torna? e se la matricola dovesse essere AA002, ottenuta la sottostringa, una volta aumentata di 1, mi darà 003 o solo 3 ?

Grazie

11 Risposte

  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    WinstonSmith ha scritto:


    Vi torna? e se la matricola dovesse essere AA002, ottenuta la sottostringa, una volta aumentata di 1, mi darà 003 o solo 3 ?
    Sì, il concetto di fondo è giusto. Ma la concatenazione con il valore intero NON "formatta" il numero con zeri davanti. Se vuoi formattare in questo senso, devi usare altro, come il String.format()

    EDIT: e domandina: cosa dovrebbe succedere se incrementi AA999 ?
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    Si avevo pensato anche all'eventualità di trovarmi un aa999... in teoria, dovrebbero "finire" le matricole, visto che aa000 presumibilmente è già occupata. Devo informarmi. Il format() non lo conoscevo, mi informo anche su questo, grazie.
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    Avendo queste matricole in un db (pk di una tabella), avevo pensato ad una select matricola from tab where matricola like 'aa%' order by matricola desc, quindi metterle in una lista e lavorare con quella in posizione 0. E' corretto o c'è un modo per prendere dal db direttamente quella con il numero più grande.

    Il like c'è perche in questa tab ci sono varie tipologie di matricole ed a me interessano solo le "aa"
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    WinstonSmith ha scritto:


    Avendo queste matricole in un db (pk di una tabella), avevo pensato ad una select matricola from tab where matricola like 'aa%' order by matricola desc, quindi metterle in una lista e lavorare con quella in posizione 0. E' corretto o c'è un modo per prendere dal db direttamente quella con il numero più grande.
    Sì c'è un modo. L'approccio/sintassi può variare in base al DBMS che usi (quale è?) ma in linea generale puoi provare con un:

    SELECT MAX(matricola) FROM tuatabella WHERE matricola LIKE 'AA%'

    Su PostgreSQL funziona (provato! con una tabella scritta al volo con varie matricole). Nota che LIKE è case-sensitive.
    E nota ancora che il MAX, essendo su una stringa compara in senso lessicografico da sinistra verso destra.
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    andbin ha scritto:


    WinstonSmith ha scritto:


    Avendo queste matricole in un db (pk di una tabella), avevo pensato ad una select matricola from tab where matricola like 'aa%' order by matricola desc, quindi metterle in una lista e lavorare con quella in posizione 0. E' corretto o c'è un modo per prendere dal db direttamente quella con il numero più grande.
    Sì c'è un modo. L'approccio/sintassi può variare in base al DBMS che usi (quale è?) ma in linea generale puoi provare con un:

    SELECT MAX(matricola) FROM tuatabella WHERE matricola LIKE 'AA%'

    Su PostgreSQL funziona (provato! con una tabella scritta al volo con varie matricole). Nota che LIKE è case-sensitive.
    E nota ancora che il MAX, essendo su una stringa compara in senso lessicografico da sinistra verso destra.
    Il db è db2, quindi con questa query riuscirei ad avere l'unica matricola di cui ho bisogno per andare a calcolare la prossima, senza dover mettere in una lista ecc ecc
    Probabilmente si potrà anche incrementare facendo tutto in sql e facendomi poi restituire quel valore già pronto all'uso
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    WinstonSmith ha scritto:


    Probabilmente si potrà anche incrementare facendo tutto in sql e facendomi poi restituire quel valore già pronto all'uso
    Sicuramente, tecnicamente, sì. Bisogna usare le funzioni di manipolazione delle stringhe che il DBMS (DB2 nel tuo caso) mette a disposizione. Vedi su una reference del DB2, non lo conosco (mai usato).
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    Alla fine l'idea di farmi restituire dalla query direttamente la matricola modificata è stata respinta, si parla di versione poco aggiornata quindi non riconosce diverse parole chiave.

    Detto che quindi AA001 dove i passaggi sopra descritti diventa al momento della concatenazione AA2, ho provato con String.format ma mi sembra troppo contorto il modo in cui ho agito... in pratica faccio un conteggio sul numero finale dei caratteri della stringa e poi aggiungo tanti zero quant'è la differenza di dimensione della stringa iniziale rispetto a quella finale... come posso migliorare questo codice orrendo?
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    WinstonSmith ha scritto:


    in pratica faccio un conteggio sul numero finale dei caratteri della stringa e poi aggiungo tanti zero quant'è la differenza di dimensione della stringa iniziale rispetto a quella finale... come posso migliorare questo codice orrendo?
    Non devi conteggiare proprio nulla. Ripeto: String.format(). E nella specifica di formato metti il flag (che è proprio 0) per indicare di mettere gli zeri davanti su N cifre.
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    andbin ha scritto:



    Non devi conteggiare proprio nulla. Ripeto: String.format(). E nella specifica di formato metti il flag (che è proprio 0) per indicare di mettere gli zeri davanti su N cifre.
    Mi sto sbagliando su qualcosa... dopo aver aumentato di 1, gli eventuali zero li perdo. Con String.format() -soluzione che ho provato senza successo- come faccio a specificare quanti/se zero deve mettere dopo "aa" e prima dell'integer quando va a concatenare?
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    WinstonSmith ha scritto:


    Mi sto sbagliando su qualcosa... dopo aver aumentato di 1, gli eventuali zero li perdo. Con String.format() -soluzione che ho provato senza successo- come faccio a specificare quanti/se zero deve mettere dopo "aa" e prima dell'integer quando va a concatenare?
    String prefisso = //.......;
    int numero = //.......;
    
    String matricola = String.format("%s%03d", prefisso, numero);
    Dove prefisso/numero li hai estratti opportunamente tramite substring dalla "vecchia" matricola.
    Il %03d vuole appunto dire: formatta su 3 cifre, con ZERI davanti.

    Ma puoi usare String.format anche solo per formattare il numero e poi concateni il prefisso ... come si vuole.
  • Re: Da String ad Integer e viceversa, passando per substring() o altro

    Grazie mille, sbagliavo a scrivere anche la regola da seguire: %s%, mentre dal dopo il % mi trovo. Grazie ancora.
Devi accedere o registrarti per scrivere nel forum
11 risposte