Conversion pleine largeur → demi-largeur avec Java String (kana pleine largeur → kana demi-largeur)

public class Zen2HanUtil {
    private static final Map<Character, String> zen2HanMap = new HashMap<>();

    // https://so-zou.jp/web-app/text/fullwidth-halfwidth/
    private static final String ZEN_CHARS = "0 1 2 3 4 5 6 7 8 9 "
            + "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 "
            + "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 "
            + "Je suis désolé"
            + "Aiue Okakikukekosashisusesotachitsutetonaninune nohahifuhehomamimumemoyayu yolarirurerowon"
            + "ゔ Gigi Guge Goza Zezozoda Jizu de Dobabibu Bebo Papi Pup Pep Po Ai Ue"
            + "Vuga giggegozajizu zezo da zu de dobababi bu bebo papipeppo wa yeo yo"
            + "- "゜,. ・ """
            + "! ” # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ "
            + "⦅ ⦆ ¢ £ ¬  ̄ ¦ ¥ ₩ │ ← ↑ → ↓ ■ ○";
    private static final String HAN_CHARS = "0 1 2 3 4 5 6 7 8 9 "
            + "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 "
            + "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 "
            + "Je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé."
            + "Je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé."
            + "Vagging, serrant, serrant, serrant, serrant, serrant, serrant, serrant, serrant, serrant, serrant"
            + "Vagging, serrant, serrant, serrant, serrant, serrant, serrant, serrant, serrant, serrant, serrant"
            + "ー ゚, ‥ ・ """
            + "! \" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _ ` { | } ~ "
            + "⦅ ⦆ ¢ £ ¬ ¯ ¦ ¥ ₩ │ ← ↑ → ↓ ■ ○";
    static {
        String[] zenSplit = ZEN_CHARS.split(" ");
        String[] hanSplit = HAN_CHARS.split(" ");
        if (zenSplit.length != hanSplit.length) {
            throw new RuntimeException("char count not match. zen=" + zenSplit.length + ", han=" + hanSplit.length);
        }
        for (int i = 0; i < zenSplit.length; i++) {
            zen2HanMap.put(zenSplit[i].charAt(0), hanSplit[i]);
        }
    }

    public static String conv(String s) {
        StringBuilder sb = new StringBuilder();
        s.chars().mapToObj(c -> (char) c).forEach(c -> {
            if (c == ' ') {
                sb.append(' ');
            } else {
                String han = zen2HanMap.get(c);
                if (han == null) {
                    sb.append(c);
                } else {
                    sb.append(han);
                }
            }
        });
        return sb.toString();
    }
}

Recommended Posts

Conversion pleine largeur → demi-largeur avec Java String (kana pleine largeur → kana demi-largeur)
Conversion Endian avec JAVA
[Java] Aligne les caractères même avec des caractères mixtes demi-largeur et pleine largeur
À propos de la conversion pleine largeur ⇔ demi-largeur des chaînes de caractères en Java
Conversion de liste Java8 avec Stream map
Chaîne Java
Diviser une chaîne avec ". (Dot)" en Java
Conversion de type Java 8 LocalDateTime (String, java.util.Date)
Conversion de type du type java Big Decimal au type String
Conversion de type Java
Lire une chaîne dans un fichier PDF avec Java
[Java] Remplissage de la chaîne de caractères
Traitement des chaînes Java
Conversion de type Java (chaîne, entier, date, calendrier, etc.)
Chaîne divisée (Java)
Installez java avec Homebrew
Changer de siège avec Java
Installez Java avec Ansible
Conversion d'URL en chaîne
[Java] Comparaison des chaînes de caractères et && et ||
Conversion de type Uri → String, String → Uri
Remplacement multiple de chaîne Java
Téléchargement confortable avec JAVA
Changer java avec direnv
[Note] Java: recherche de chaînes de caractères
[Note] Java: enquête sur les chaînes de caractères
À propos de la classe Java String
Téléchargement Java avec Ansible
Raclons avec Java! !!
Programme de conversion en chaîne Leet
Construire Java avec Wercker
[Java] Conversion de type de date
[Java] Obtenir le jeu de caractères avec Apathce Tika / Initialiser la chaîne à partir du jeu de caractères [Kotlin]
Initialisation avec une chaîne vide vers une instance de type Java String