BETA

unicode表記と普通表記が混在した文字列を普通表記に変換するスニペット

投稿日:2019-07-18
最終更新:2019-07-18

unicode -> 普通表記は以下の記事から引用。
https://qiita.com/sifue/items/039846cf8415efdc5c92

入力は実行ディレクトリに stacktraceの名前でファイルとして格納してください。


import java.io.IOException;  
import java.nio.file.Files;  
import java.nio.file.Path;  
import java.nio.file.Paths;  
import java.util.List;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public class Kicker {  
    public static void main(String[] args) throws IOException {  
        Path filePath = Paths.get("./stacktrace");  
        List<String> lines = Files.readAllLines(filePath);  
        lines.forEach(line -> {  
            String converted = convert(line);  
            System.out.println(converted);  
        });  
    }  

    private static String convert(String original) {  
        String tmp = original;  
        Pattern pattern = Pattern.compile("\\\\u[0-9A-Z]{4}");  
        Matcher matcher = pattern.matcher(tmp);  
        while (matcher.find()) {  
            String unicode = matcher.group();  
            String humanChar = convertToOiginal(unicode);  
            tmp = tmp.replace(unicode, humanChar);  
        }  
        return tmp;  
    }  

    /**  
     * Unicode文字列から元の文字列に変換する ("\u3042" -> "あ")  
     * @param unicode  
     * @return  
     */  
    private static String convertToOiginal(String unicode) {  
        String[] codeStrs = unicode.split("\\\\u");  
        int[] codePoints = new int[codeStrs.length - 1]; // 最初が空文字なのでそれを抜かす  
        for (int i = 0; i < codePoints.length; i++) {  
            codePoints[i] = Integer.parseInt(codeStrs[i + 1], 16);  
        }  
        String encodedText = new String(codePoints, 0, codePoints.length);  
        return encodedText;  
    }  
}  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@meteorideの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!