Par exemple
En C, je soustrais simplement le caractère de ‘A’, mais je ne semble pas pouvoir le faire en java.
Vous pouvez également faire des calculs simples avec des caractères en Java:
System.out.println('A' - 'A');
affichera 0.
Utilisez la méthode indexOf
sur un object Ssortingng. Par exemple,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf('F')
renvoie 5.
en fait le point faible des autres solutions ici est qu’elles impliquent la création de chaîne
public enum Alphabet { A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z }
vous pouvez maintenant utiliser la fonction ordinale pour obtenir le décalage ici. Par exemple, Alphabet.L.ordinal ();
Cependant, puisque je suppose que vous avez affaire à des fonctions, voici une définition plus utile
public enum Alphabet { A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z; public static int getNum(Ssortingng targ) { return valueOf(targ).ordinal(); } public static int getNum(char targ) { return valueOf(Ssortingng.valueOf(targ)).ordinal(); } }
Notes: contrairement aux autres langues, vous pouvez déclarer une enum dans son propre fichier, exactement comme une classe. En réalité, les énoncés énumérés ci-dessus peuvent également contenir des champs et des méthodes. Les champs sont créés de manière statique et sont très difficiles à décomposer. En fait, l’utilisation d’un enum avec uniquement des méthodes et des variables locales et un seul type enum appelé INSTANCE est la méthode recommandée pour créer un singleton, car il est indissociable, même par reflection.
Vous voudrez peut-être aussi y insérer un appel toUppercase () si vous ne contrôlez pas les appels de la fonction
Si vous souhaitez créer votre alphabet de manière plus dynamic plutôt que d’utiliser un alphabet prédéfini, vous devriez vous pencher sur les cartes.
Le résultat attendu est simplement le offset
d’une lettre majuscule par rapport à 'A'
. Il suffit donc de soustraire la valeur Unicode de 'A'
de la valeur Unicode de la lettre dont le décalage est nécessaire.
exemple: 'B' - 'A' = 1
Voici différentes implémentations qui fonctionnent en temps logarithmique:
Classe
import java.util.Arrays; import java.util.Collections; public class CharacterIndex { private char[] characters = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; public int index(char character) { assert characters != null; return Arrays.binarySearch(characters, Character.toUpperCase(character)); } }
Test de l’unité
import org.junit.Before; import org.junit.Test; import static junit.framework.Assert.assertEquals; public class CharacterIndexTest { private CharacterIndex characterIndex; @Before public void createIndex() { characterIndex = new CharacterIndex(); } @Test public void testIndexOfLetterA() { assertEquals(0, characterIndex.index('A')); assertEquals(0, characterIndex.index('a')); } @Test public void testNotALetter() { assertEquals(-1, characterIndex.index('1')); } }
Ssortingng alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; return alphabet.indexOf( myChar );