À propos de la conversion pleine largeur ⇔ demi-largeur des chaînes de caractères en Java

Contexte

En entreprise, il est devenu nécessaire de mettre en œuvre une conversion pleine largeur → demi-largeur ou demi-largeur → pleine largeur des chaînes de caractères. Une note du résultat de l'enquête. Il est utilisé pour absorber les fluctuations de notation lors du traitement de comparaison.

Exigences

--Cible de conversion: caractères alphanumériques, symboles

Méthode

Normalizer Méthode 1. Comment utiliser java.text.Normalizer qui est disponible dans Java 6 ou version ultérieure. Par souci, comme il n'est pas destiné à une conversion pleine largeur ⇔ demi-largeur, une conversion supplémentaire peut se produire pendant le processus de normalisation.

ICU4J ICU - International Components for Unicode Méthode 2. Utilisez une bibliothèque externe. Utilisez la dernière version au moment de la rédaction, ICU 4J 63.1.

La source

Transliterator fullToHalf = Transliterator.getInstance("Fullwidth-Halfwidth");
Transliterator halftoFull = Transliterator.getInstance("Halfwidth-Fullwidth");
String target =
    "Tous à moitié ""\" \"Agapa Agapa ABabABab123123 "" ()()[][];;!!??##//--・ ┣ ① ⑪ ㌀ Co., Ltd. ㌔¼ ⑴";
System.out.println("target :" + target);
System.out.println("NFC    :" + Normalizer.normalize(target, Normalizer.Form.NFC));
System.out.println("NFD    :" + Normalizer.normalize(target, Normalizer.Form.NFD));
System.out.println("NFKC   :" + Normalizer.normalize(target, Normalizer.Form.NFKC));
System.out.println("NFKD   :" + Normalizer.normalize(target, Normalizer.Form.NFKD));
System.out.println("ICU4J H:" + fullToHalf.transliterate(target));
System.out.println("ICU4J F:" + halftoFull.transliterate(target));

Résultat d'exécution

target :Tous à moitié """ "Agapa Agapa ABabABab123123 "" ()()[][];;!!??##//--・ ┣ ① ⑪ ㌀ Co., Ltd. ㌔¼ ⑴
NFC    :Tous à moitié """ "Agapa Agapa ABabABab123123 "" ()()[][];;!!??##//--・ ┣ ① ⑪ ㌀ Co., Ltd. ㌔¼ ⑴
NFD    :Tous à moitié """ "Agapa Agapa ABabABab123123 "" ()()[][];;!!??##//--・ ┣ ① ⑪ ㌀ Co., Ltd. ㌔¼ ⑴
NFKC   :Tous à moitié """ "Agapa Agapa Agapa ABabABab123123 ""()()[][];;!!??##//--・ ┣111 appartement(Stock)Km 1⁄4(1)
NFKD   :Tous à moitié """ "Agapa Agapa Agapa ABabABab123123 ""()()[][];;!!??##//--・ ┣111 appartement(Stock)Km 1⁄4(1)
ICU4J H:Tous à moitié """ "Agapa Agapa ABabABab123123 ""()()[][];;!!??##//--・ ┣①⑪㌀ Co., Ltd.㌔¼⑴
ICU4J F:Tous les demi "" "Agapa Agapa Agapa ABabABab123123" "" () () [] [] ;;! !! ?? ?? ## // -- ・ ┣ ① ⑪ ㌀ Co., Ltd. ㌔¼ ⑴

Conclusion

Cette fois, j'ai décidé d'utiliser ICU4J pour passer de la pleine largeur à la demi-largeur. Si vous pouvez affiner l'entrée à l'avance, je pense que Normalizer est plus facile et meilleur.

Les références

Recommended Posts

À propos de la conversion pleine largeur ⇔ demi-largeur des chaînes de caractères en Java
Conversion pleine largeur → demi-largeur avec Java String (kana pleine largeur → kana demi-largeur)
[java] Résumé de la gestion des chaînes de caractères
À propos de l'idée des classes anonymes en Java
[Java] Gestion des chaînes de caractères (classe String et classe StringBuilder)
Principes de base de l'utilisation des caractères (Java)
À propos de la classe abstraite Java
Implémentation Java de tri-tree
[Java] Méthode de comparaison de chaînes de caractères et méthode de comparaison utilisant des expressions régulières
[Introduction à Java] Gestion des chaînes de caractères (classe String, classe StringBuilder)
Devinez le code de caractère en Java
À propos de Biocontainers fastqc et Java
À propos de Lambda, Stream, LocalDate de Java8
[Java] Supprimer les espaces dans les chaînes de caractères
Liste des membres ajoutés dans Java 9
Convertir un tableau de chaînes en une liste d'entiers en Java
Concaténer les chaînes renvoyées par des méthodes multi-objets dans Java Stream
A propos du traitement de la copie de fichiers en Java
[Algorithme] Ordre décroissant des chaînes de caractères
Liste des types ajoutés dans Java 9
Implémentation d'une fonction similaire en Java
Comment concaténer des chaînes avec Java
A propos du renvoi d'une référence dans un Java Getter
Implémentation de DBlayer en Java (RDB, MySQL)
Obtenez le résultat de POST en Java
[Explication facile à comprendre! ] Conversion de type de type de référence en Java
OCR en Java (reconnaissance de caractères à partir d'images)
[Création] Un mémorandum sur le codage en Java
Comment faire une conversion de base en Java
À propos des enregistrements ajoutés pour l'aperçu dans Java JDK 14
Fonction de conversion d'objet de liste immuable (immuable) dans Java8
Discussion continue sur l'écriture de Java avec Emacs @ 2018
[Java] Précautions lors de la comparaison de chaînes de caractères avec des chaînes de caractères
L'histoire de l'écriture de Java dans Emacs
Rôle de JSP dans les applications Web [Java]
Discrimination d'énum dans Java 7 et supérieur
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
[Introduction à Java] À propos de la conversion de type (distribution, promotion)
A propos de l'ordre de description des propriétés système Java
Une histoire sur le JDK à l'ère de Java 11
Essayez de gratter environ 30 lignes en Java (sortie CSV)
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
À propos de var utilisé en Java (type de variable locale)
[Java] Utilisation de final dans la déclaration de variable locale
Ressentez le passage du temps même à Java
Calculer le score de similarité des chaînes de caractères avec JAVA
Un examen rapide de Java appris en classe
Nom de méthode de la chaîne de méthodes dans Java Builder + α
Importer des fichiers de la même hiérarchie en Java