背景
百度贴吧是以兴趣主题聚合志同道合者的互动平台,同好网友聚集在这里交流话题、展示自我、结交朋友。在这里,人才辈出,金句频出,新梗无限。
其中,丁真宇宙是贴吧老哥创造的集大成者,可文可武,他的文字格式一般为一眼丁真(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万!
我的评价是未来可期!(赢^^赢)
网友评论