web-dev-qa-db-fra.com

Comment incrémenter une variable à la lettre suivante ou précédente de l'alphabet?

J'ai une lettre majuscule définie dans une chaîne de variable et je veux sortir les lettres suivantes et précédentes de l'alphabet. Par exemple, si la variable était égale à 'C', je voudrais générer 'B' et 'D'.

17
raleighJ

Une manière:

String value = "C";
int charValue = value.charAt(0);
String next = String.valueOf( (char) (charValue + 1));
System.out.println(next);
28
Kevin

Eh bien, si vous voulez parler de «ABC», ils se divisent en deux séquences a-z et A-Z. La façon la plus simple de procéder serait d’utiliser une variable char et d’incrémenter l’indice de un.

char letter='c';
letter++;  // (letter=='d')

il en va de même pour décrémenter:

char letter='c';
letter--; // (letter=='b')

le fait est que les lettres a-z sont représentées entre 97-122 et A-Z entre 65 et 90. Si le cas de la lettre est important, vous devez y porter une attention particulière.

12
TacB0sS

Si vous êtes limité à l'alphabet latin, vous pouvez utiliser le fait que les caractères de la table ASCII sont classés par ordre alphabétique. Ainsi:

System.out.println((char) ('C' + 1));
System.out.println((char) ('C' - 1));

sorties D et B.

Ce que vous faites est d’ajouter une char et une int, ajoutant ainsi effectivement la int au code ascii de la char. Lorsque vous convertissez à char, le code ASCII est converti en un caractère.

5
Bozho

juste comme ça :

System.out.printf("%c\n",letter);
letter++;
0
Daniel

Toutes les réponses sont correctes mais aucune ne semble donner une explication complète, alors je vais essayer. Comme tout autre type, une char est stockée sous forme de nombre ( 16 bits en Java ). Contrairement aux autres types non numériques, le mappage des valeurs des nombres stockés sur les valeurs des chars qu'ils représentent est bien connu. Ce mappage est appelé ASCII Table . Le compilateur Java considère chars comme un nombre 16 bits et vous pouvez donc effectuer les opérations suivantes:

System.out.print((int)'A'); // prints 65
System.out.print((char)65); // prints A

Pour cette raison, les opérations ++, -- et d’autres opérations mathématiques s’appliquent à chars et permettent d’incrémenter/de réduire leurs valeurs.

Notez que la diffusion est cyclique lorsque vous dépassez 16 bits:

System.out.print((char)65601); // also prints A
System.out.print((char)-65471); // also prints A

P.S. Ceci s'applique également à Kotlin:

println('A'.toInt()) // prints 65
println(65.toChar()) // prints A
println(65601.toChar()) // prints A
println((-65471).toChar()) // prints A
0
Sir Codesalot