Maison >interface Web >js tutoriel >Compter avec un jeu de caractères arbitraire
Points de base
Cet article introduira une technique de comptage de jeux de caractères arbitraires simples et flexibles. Bien que cette technique ne soit pas souvent nécessaire, en cas de besoin, vous constaterez que les fonctions intégrées de JavaScript ne peuvent pas le gérer complètement. JavaScript a des fonctions intégrées pour l'analyse et la conversion des nombres entre différentes cardinalités numériques. Par exemple, la méthode parseInt
peut gérer n'importe quelle cardinalité (cardinalité numérique) de 2 à 36, et est généralement utilisée pour la conversion numérique et le comptage de la cardinalité non décimale. Number.toString
La méthode peut inverser la conversion, convertir les nombres décimaux en chaîne numérique non décimale:
var character = "2F"; alert(parseInt(character, 16)); // 弹出 47 var number = 47; alert(number.toString(16)); // 弹出 "2F"
Mais que se passe-t-il si vous voulez compter en utilisant des numéros de Klingon? Ou plus probablement, utilisez des lettres grecques ou cyrilliques, des hiéroglyphes ou une sorte de rune? La technique que je vais démontrer peut le faire avec précision, dans toute cardinalité numérique;
Le glossaire est crucial
Tout d'abord, nous devons définir un vocabulaire, le dictionnaire des caractères que nous utiliserons, définis comme une seule chaîne de séquences d'échappement Unicode. Dans ce cas, nous avons 16 lettres grecques de capital, d'Alpha à Pi - chaque numéro est représenté par une lettre, et la longueur de la chaîne entière détermine la base numérique:
var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";
La séquence d'échappement est un caractère
Il convient de noter que même s'il faut six caractères de frappe pour définir une séquence d'échappement Unicode, il apparaît toujours comme un seul caractère dans la chaîne, donc la longueur de vocabulaire est de 16 caractères. Une fois que nous avons un vocabulaire, nous pouvons utiliser String.charAt
pour citer les caractères par index de nombre, et vice versa, nous pouvons utiliser String.indexOf
pour obtenir l'index numérique des caractères:
var character = "2F"; alert(parseInt(character, 16)); // 弹出 47 var number = 47; alert(number.toString(16)); // 弹出 "2F"
Par conséquent, tous les calculs que nous effectuons seront basés sur les deux méthodes. Par exemple, définissons une boucle, exécutons les itérations "κ" et énumons chaque caractère entre:
var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";
Mais qu'en est-il des plus grands nombres, tels que des équivalents de personnages qui montrent 23? Nous avons juste besoin d'extraire les nombres individuels, puis d'obtenir le personnage équivalent, dans ce cas 2 et 3:
var number = lexicon.indexOf("u0398"); // "Θ" 的十进制等价物 var character = lexicon.charAt(7); // 7 的字符等价物
pour rendre les choses plus intéressantes, que se passe-t-elle si le nombre que nous convertissons contient des lettres et des nombres, comme le numéro hexadécimal "2f"? Dans ce cas, nous devons convertir chaque numéro séparément parce que nous ne pouvons pas nous référer aux caractères par index hexadécimal (c'est-à-dire que lexicon.charAt("F")
devons devenir lexicon.charAt(15)
):
var str = ""; for(var i=0; i<lexicon.indexOf("u039a"); i++) { str += lexicon.charAt(i); } alert(str);
Bien sûr, les deux derniers exemples sont assez simples, car le nombre de chiffres du nombre est connu cependant; Tous les composants dont vous avez besoin sont fournis ici, ajustez-les simplement à vos besoins spécifiques.
Les données sont cruciales!
Il arrive que vous puissiez compter en utilisant des nombres et des lettres latins normaux de la même manière si vous le souhaitez. L'évolutivité du glossaire signifie que vous pouvez l'utiliser pour étendre les capacités natives de JavaScript à une cardinalité supérieure à 36 et utiliser tout symbole qui semble approprié à l'époque.
ou développez simplement des horloges élégantes!
Vous voulez en savoir plus?
Si vous voulez en savoir plus sur James, abonnez-vous à notre Weekly Tech Times Newsletter Tech Times.
FAQ sur n'importe quel jeu de caractères (FAQ)
(La partie FAQ fournie dans le texte d'origine doit être incluse ici, et pour des raisons de longueur, elle est omise ici)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!