用Java探索丁真宇宙有多大?(认真思考^^)

背景

百度贴吧是以兴趣主题聚合志同道合者的互动平台,同好网友聚集在这里交流话题、展示自我、结交朋友。在这里,人才辈出,金句频出,新梗无限。
其中,丁真宇宙是贴吧老哥创造的集大成者,可文可武,他的文字格式一般为一眼丁真(yy丁真,前2字的拼音首字母为y),鉴定为:假。为了探索丁真宇宙还有多少发挥空间,我想穷举一下这个yy组合数量有多少种。

Java实现

首先我们要拿到中文汉字的集合,这里用的是pinyin4j库的数据集:


部分数据集

数据集分两列,左列为汉字的unicode编码,右侧为该汉字对应的拼音,有些汉字是多拼音。我要做的便是将他重新映射为y拼音首字母开头对应的汉字数组。
实现如下:

import com.alibaba.fastjson.JSON;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public static void main(String[] args) throws IOException {
        long count = 0;
        Map<String, List<Character>> map = new HashMap<>();
        final String resourceName = "/pinyindb/unicode_to_hanyu_pinyin.txt";
        try (BufferedReader bReader = new BufferedReader(new InputStreamReader(PinyinHelper.class.getResourceAsStream(resourceName)))) {
            String line;
            while ((line = bReader.readLine()) != null) {
                String[] lineArr = line.split(" ");
                String pinyin = lineArr[1].substring(1, lineArr[1].length() - 1);
                String[] pinyinArr = pinyin.split(",");
                for (String py : pinyinArr) {
                    if (py.charAt(0) == 'y') {
                        count++;
                        String hex = lineArr[0];
                        int decimal = Integer.parseInt(hex,16);
                        char chinese = (char)decimal;
                        if (map.containsKey(py)) {
                            List<Character> list = map.get(py);
                            list.add(chinese);
                            map.put(py,list);
                        } else {
                            List<Character> list = new ArrayList<>();
                            list.add(chinese);
                            map.put(py,list);
                        }
                    }
                }
            }
            System.out.println("数量:"+count+"集合:"+JSON.toJSONString(map));
        }
    }

结果

运行后,得到y拼音首字母开头的汉字有2084个,其中包含简体字和繁体字,哪怕算是一半繁体字,也还有1000简体字,如果再排除叠字丁真(目前我还没见过云云丁真这样的组合,一般没啥含义,忽略不计),还有部分语气词类的汉字,比如“哟”,“唷”等,然后计算结果:950x949=901550,90万!
我的评价是未来可期!(赢^^赢)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容