RISOLTO Java - conversione da char a String

Stato
Discussione chiusa ad ulteriori risposte.

petrusic

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
Non so che prefisso potrei selezionare, perchè vi voglio comunicare come ho risolto la conversione di un carattere dal type char al formato String.

Nel mio costruendo programma ho incontrato la necessità di incrementare automaticamente un codice alfabetico di carattere (String) di un campo di tabella di DB.
Dopo innumerevoli ricerche, nelle quali non ho trovato la risposta che cercavo, ho capito che potevo fare così:
Codice:
       char[] ch = {'a'};     
        int n = ch[0];
        System.out.println("ch= '" + ch[0] + "'");
        System.out.println("n= '" + n + "'");
        ++ch[0];
        n = ch[0];
        String str = new String(ch);
        System.out.println("ch= '" + ch[0] + "'");
        System.out.println("n= '" + n + "'");
        System.out.println("str= '" + str + "'");
ottenendo :
ch= 'a'
n= '97'
ch= 'b'
n= '98'
str= 'b'
perciò
:dancinghae:
bevete con me! :brindiamo:
 
Ultima modifica:

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
In Java, in modo simile a C, C++ ed altri linguaggi, esiste una corrispondenza numerica tra interi e caratteri. Più in dettaglio, la conversione tra i tipi char ed int avviene senza perdita di precisione e senza che sia necessaria nessuna conversione esplicita; in altri termini se si fa
char u = 'a';
int n = u; // n=97

cioè ad n viene assegnato il numero d'ordine Unicode del carattere 'a' (97);
è lecito anche il viceversa purché l'assegnamento venga fatto su una costante intera
char u = 99; // u ='c'
quello che non si può fare è assegnare una espressione, a causa del pericolo di perdita di informazioni. Per esempio per trovare il carattere successivo in ordine lessicografico ad un carattere dato come "origine" bisogna forzare una conversione di tipo:
char u = 'a';
char v = (char)(u+1); // v = 'b', il successore di 'a'

infine, la classe Character standard del linguaggio mette a disposizione un comodo metodo statico per convertire un carattere in Stringa
String s = Character.toString(v); // s = "b"
Tutto questo per dire cosa?
Se hai un carrattere di tipo char di cui vuoi "calcolare" il successore e poi trasformarlo in stringa, ti basta una sola istruzione, certamente più leggibile (ed efficiente) rispetto al codice di cui alla precedente discussione:
String successore = Character.toString( (char)(u+1) );
@petrusic
per verificarlo, compila e prova il seguente codice
Java:
public class Prova
{
    public static void main(String[] args){
        char u = 'a';
        // v = successore di u
        char v = (char)(u+1);
        String s = Character.toString(v);
        System.out.println("String s = " + s);
        //oppure direttamente tutto in una sola istruzione
        String successore = Character.toString( (char)(u+1) );
        System.out.println("String successore = " + successore);
    }
}
l'output di questo programma è
Codice:
String s = b
String successore = b
 
Ultima modifica da un moderatore:
  • Mi piace
Reazioni: Ibernato

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Bene, attendiamo eventualmente @petrusic per ulteriori chiarimenti
 

Andretti60

Utente Èlite
6,440
5,091
Al momento sono con lo smartphone e non posso rispondere bene, ma quello che scrivi tu
“codice alfabetico di carattere (String)”
e’ sbagliato, il tipo String è una stringa di caratteri alfanumerici, non UN codice alfabetico (non solo in Java). Incrementare un codice alfabetico è comunque rischioso perché puoi ottenerne uno che non sia stampabile, con le dovute conseguenze, va quindi fatto con cautela.
 

petrusic

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
...
Se hai un carrattere di tipo char di cui vuoi "calcolare" il successore e poi trasformarlo in stringa, ti basta una sola istruzione, certamente più leggibile (ed efficiente) rispetto al codice di cui alla precedente discussione:
String successore = Character.toString( (char)(u+1) );

per verificarlo, compila e prova il seguente codice
Java:
{
    public static void main(String[] args){
        char u = 'a';
        // v = successore di u
        char v = (char)(u+1);
        String s = Character.toString(v);
        System.out.println("String s = " + s);
        //oppure direttamente tutto in una sola istruzione
        String successore = Character.toString( (char)(u+1) );
        System.out.println("String successore = " + successore);
    }
}

Provato ed il risultato è effettivamente:
String s = b
String successore = b

Grazie per l'approfondimento che ho letto con attenzione.
Post unito automaticamente:

Al momento sono con lo smartphone e non posso rispondere bene, ma quello che scrivi tu
“codice alfabetico di carattere (String)”
e’ sbagliato, il tipo String è una stringa di caratteri alfanumerici, non UN codice alfabetico (non solo in Java). Incrementare un codice alfabetico è comunque rischioso perché puoi ottenerne uno che non sia stampabile, con le dovute conseguenze, va quindi fatto con cautela.

Mi sono espresso male, lo capisco, ma l'ho fatto solo per non ripetere il termine "String"
Post unito automaticamente:

Vi ringrazio ancora per l'attenzione con cui mi seguite.

Devo dire che il mio messaggio d'apertura non sperava di accogliere tanto fervore. :hihi:

Volevo soltanto rendervi partecipi al mio piccolo successo in termini di crescita. Tutto qui.
Infatti, alla fine, sono contento lo stesso :dancinghae:
Post unito automaticamente:

Ho notato ora che a questa ... chiamiamola "discussione" è stato imposto il prefisso di <DOMANDA>,
ma, secondo me, va aggiunto nella scaletta dei prefissi un altro termine come per es. "esperienza", "comunicato", "condivione", ...
 
Ultima modifica:
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!