Ma connaissance de Java s'est presque arrêtée à "1.4". Afin de changer la situation actuelle, je vais l'améliorer petit à petit.
Actuellement, l'application que j'ai principalement touchée en entreprise fonctionne à "5", À l'origine, c'était une application avant "1.4", et l'ancienne description demeure. Grâce à la mise à jour de la version de cette application, cette fois, je ne décrirai que ce que j'ai étudié sur les fonctions ajoutées dans "6".
Java6 comportait-il de nombreuses améliorations liées au bureau? Peut-être est-il utilisé dans une application que je touche au travail? J'ai étudié deux fonctions que je pensais.
La normalisation Unicode est désormais possible. Soudainement difficile ...
Référence: Normalisation Unicode
Il existe quatre types de normalisation Unicode:
type | Aperçu |
---|---|
NFC | Après décomposition basée sur l'équivalence canonique, resynthétiser sur la base de l'équivalence canonique |
NFD | Décomposition basée sur l'équivalence canonique |
NFKC | Après décomposition basée sur l'équivalence de compatibilité, resynthétiser en fonction de l'équivalence canonique |
NFKD | Décomposition basée sur l'équivalence de compatibilité |
―― Qu'est-ce que la synthèse? Traitement qui convertit une chaîne de caractères combinée en un caractère synthétisé
――Qu'est-ce que le démontage? Traitement qui convertit les caractères synthétisés en chaînes de caractères combinées
Qu'est-ce qu'une chaîne de caractères combinée? Une chaîne de caractères qui est une combinaison de plusieurs caractères mais qui est représentée par un seul caractère
Qu'est-ce qu'un personnage composite? Caractères tels que "ga", "gi", "gu", etc. qui sont exprimés en un seul caractère en combinant "ka", "ki", "ku" et turbidité (") Référence: [Caractères composés](https://ja.wikipedia.org/wiki/%E5%90%88%E6%88%90%E6%B8%88%E3%81%BF%E6%96%87 % E5% AD% 97)
System.out.println("1:Ha-> " + Normalizer.normalize("Ha", Normalizer.Form.NFC));
System.out.println("2:Ba-> " + Normalizer.normalize("Ba", Normalizer.Form.NFC));
System.out.println("3:Ba-> " + Normalizer.normalize("Ba", Normalizer.Form.NFC));
System.out.println("4:Si-> " + Normalizer.normalize("Si", Normalizer.Form.NFC));
System.out.println("5:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFC));
System.out.println("6:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFC));
System.out.println("7:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFC));
System.out.println("8:㍉ -> " + Normalizer.normalize("㍉", Normalizer.Form.NFC));
System.out.println("9:① -> " + Normalizer.normalize("①", Normalizer.Form.NFC));
System.out.println("1:Ha-> " + Normalizer.normalize("Ha", Normalizer.Form.NFKC));
System.out.println("2:Ba-> " + Normalizer.normalize("Ba", Normalizer.Form.NFKC));
System.out.println("3:Ba-> " + Normalizer.normalize("Ba", Normalizer.Form.NFKC));
System.out.println("4:Si-> " + Normalizer.normalize("Si", Normalizer.Form.NFKC));
System.out.println("5:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFKC));
System.out.println("6:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFKC));
System.out.println("7:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFKC));
System.out.println("8:㍉ -> " + Normalizer.normalize("㍉", Normalizer.Form.NFKC));
System.out.println("9:① -> " + Normalizer.normalize("①", Normalizer.Form.NFKC));
System.out.println("1:Ha-> " + Normalizer.normalize("Ha", Normalizer.Form.NFD));
System.out.println("2:Ba-> " + Normalizer.normalize("Ba", Normalizer.Form.NFD));
System.out.println("3:Ba-> " + Normalizer.normalize("Ba", Normalizer.Form.NFD));
System.out.println("4:Si-> " + Normalizer.normalize("Si", Normalizer.Form.NFD));
System.out.println("5:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFD));
System.out.println("6:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFD));
System.out.println("7:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFD));
System.out.println("8:㍉ -> " + Normalizer.normalize("㍉", Normalizer.Form.NFD));
System.out.println("9:① -> " + Normalizer.normalize("①", Normalizer.Form.NFD));
System.out.println("1:Ha-> " + Normalizer.normalize("Ha", Normalizer.Form.NFKD));
System.out.println("2:Ba-> " + Normalizer.normalize("Ba", Normalizer.Form.NFKD));
System.out.println("3:Ba-> " + Normalizer.normalize("Ba", Normalizer.Form.NFKD));
System.out.println("4:Si-> " + Normalizer.normalize("Si", Normalizer.Form.NFKD));
System.out.println("5:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFKD));
System.out.println("6:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFKD));
System.out.println("7:Pennsylvanie-> " + Normalizer.normalize("Pennsylvanie", Normalizer.Form.NFKD));
System.out.println("8:㍉ -> " + Normalizer.normalize("㍉", Normalizer.Form.NFKD));
System.out.println("9:① -> " + Normalizer.normalize("①", Normalizer.Form.NFKD));
Quand j'ai essayé le code ci-dessus, NFC n'a pas de conversion. Dans NFKC, le katakana demi-largeur est converti en katakana pleine largeur et les caractères spéciaux sont convertis en caractères correspondants. NFD ne convertit pas les Katakana demi-largeur. Le son boueux (son semi-trouble) est divisé en un point boueux (point semi-trouble) et un son clair. Aucune conversion pour les caractères spéciaux. Dans NFKD, le katakana demi-largeur est divisé en katakana pleine largeur, et le son boueux (son semi-trouble) est divisé en point boueux (point semi-trouble) et son clair. Les caractères spéciaux sont convertis en caractères correspondants. est devenu.
Référence: Normalisation Unicode
En utilisant NFKC
, il semble qu'il puisse être utilisé comme méthode pour convertir un kana demi-largeur en kana pleine largeur,
Il semble y avoir des endroits où il faut faire attention.
String before = "Conversion de Hankaku Kana en Kana pleine largeur";
String after = Normalizer.normalize(before, Normalizer.Form.NFKC);
System.out.println(before);
System.out.println(after);
http://d.hatena.ne.jp/stealthinu/20140826/p1
Il n'y a pas de problème avec ce qui précède, mais je pensais que la marque de cercle pleine largeur (¥) serait sortie telle quelle dans les cas suivants. Il a été converti et sorti.
String before = "Café au lait ¥ 110";
String after = Normalizer.normalize(before, Normalizer.Form.NFKC);
System.out.println(before);
System.out.println(after);
Le code de caractère est le suivant.
before:ff7a ff70 ff8b ff70 725b 4e73 20 ffe5 31 31 30
after :30b3 30fc 30d2 30fc 725b 4e73 20 a5 31 31 30
Lors de la conversion d'un kana demi-largeur en kana pleine largeur, il peut être préférable de créer une table de mappage et de créer une logique qui convertit les caractères correspondants.
Vous pouvez copier un tableau en utilisant ʻArrays.copyOf`.
String[] before = {"café", "Lait", "110 yens"};
String[] after = Arrays.copyOf(before, before.length);
System.out.println("before:" + Arrays.toString(before));
System.out.println("after :" + Arrays.toString(after));
before[0] = "fraise";
after[2] = "150 yens";
System.out.println("before:" + Arrays.toString(before));
System.out.println("after :" + Arrays.toString(after));
before:[café,Lait,110 yens]
after :[café,Lait,110 yens]
before:[fraise,Lait,110 yens]
after :[café,Lait,150 yens]
C'est une copie profonde. Le toString de la classe Arrys est une méthode ajoutée dans "1.5".
Ensuite, je vais vérifier "7", "8" et "9" ensemble.
Recommended Posts