- 浏览: 182511 次
- 性别:
- 来自: 北京
最新评论
-
u011374223:
获取颜色的方法有两个,07xssfWORKBOOK的需要用这个 ...
apache poi读取excel中的颜色,真是坑爹啊 -
zhangtcb:
读取的颜色和Excel中的不一样啊
apache poi读取excel中的颜色,真是坑爹啊 -
LD_21:
...
log4j日志文件的相对路径 -
xfxlch:
upThx
来,让我们一起画个印章吧 -
xinxinlong:
单元格的style里面有个颜色,如果双击单元格,里面的文字选中 ...
apache poi读取excel中的颜色,真是坑爹啊
如题,项目需要,首先可用的自然是pinyin4j.
在不考虑多音字的情况下,全拼自然搞定.
双拼只是替换了全拼的声母和韵母,使用正则和对照也可以搞定.就是要注意声母中并没有y和w,但是常用拼音中却有,正则中要加入这两个.
五笔的话,参看我上一篇文章.
这里放出工具类,注意引入pinyin4j-2.5.jar包
public class StringUtil { /** * 匹配单个字符全拼的声母和韵母,声母可能不存在.注意y和w,虽然不在声母范围,但是居首也是有可能的 */ private static final Pattern psp = Pattern .compile("^([bpmfdtnlgkhjqxrzcsyw]{0,2})([aeiouv][a-z]*)$"); private static HanyuPinyinOutputFormat hpof; private static Properties wb86; private static Properties shuangPin; static { // 拼音格式 hpof = new HanyuPinyinOutputFormat(); hpof.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出全小写 hpof.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不显示音调 hpof.setVCharType(HanyuPinyinVCharType.WITH_V);// ü替换为v // 五笔数据 wb86 = new Properties(); try { wb86.load(new BufferedInputStream(StringUtil.class .getResourceAsStream("wb86.properties"))); } catch (IOException e) { e.printStackTrace(); } // 双拼 shuangPin = new Properties(); try { shuangPin.load(new BufferedInputStream(StringUtil.class .getResourceAsStream("sp.properties"))); } catch (IOException e) { e.printStackTrace(); } } /** * 字符转化为拼音.无法转换返回null,转换成功返回所有的发音 * * @param c * @return */ public static String[] charToPinyin(char c) { if (c < 0x4E00 || c > 0x9FA5) {// GBK字库在unicode中的起始和结束位置 if (c != 0x3007) {// 圆圈0比较特殊,需要处理一下 return null; } } try { return PinyinHelper.toHanyuPinyinStringArray(c, hpof); } catch (BadHanyuPinyinOutputFormatCombination e) { return null; } } /** * 获取单个字符的双拼,顺序和全拼一致 * * @param c * @return */ public static String[] charToShuangPin(char c) { String[] array = charToPinyin(c); if (array == null) { return array; } String[] result = new String[array.length]; for (int i = 0; i < array.length; i++) { String s = array[i]; Matcher m = psp.matcher(s); if (m.matches()) { String sm = m.group(1); String smdz = shuangPin.getProperty(sm); String ym = m.group(2); String ymdz = shuangPin.getProperty(ym); String r = ""; if (smdz != null) { r = smdz; } if (ymdz != null) { r += ymdz; } result[i] = r; } else { System.err.println("分解" + c + "拼音的拼音时发生错误!无法拆分出声母和韵母."); } } return result; } /** * 返回字符串的拼音的首字母,每个多音字只取第一个发音. * * @param s * @return */ public static String toPinyinShouZiMu(String s) { if (s == null || s.length() == 0) { return null; } StringBuilder sb = new StringBuilder(); for (char c : s.toCharArray()) { String[] r = charToPinyin(c); if (r == null) { sb.append(c); } else { String py = r[0]; if (py.length() > 0) { sb.append(py.charAt(0)); } } } return sb.toString(); } /** * 返回字符串的拼音,全拼,每个字的首字母大写,每个多音字只取第一个发音. * * @param s * @return */ public static String toQuanPin(String s) { if (s == null || s.length() == 0) { return null; } StringBuilder sb = new StringBuilder(); for (char c : s.toCharArray()) { String[] r = charToPinyin(c); if (r == null) { sb.append(c); } else { String py = r[0]; if (py.length() > 0) { char f = Character.toUpperCase(py.charAt(0)); // if ((f == 'A' || f == 'O' || f == 'E') && sb.length() > // 0) { // aoe 开头的音节连接在其它音节后面的时候,如果音节的界限发生混淆,用隔音符号(')隔开,例如 // pí'ǎo(皮袄)xī'ān(西安)。 // py = "'" + f + py.substring(1); // } else { py = f + py.substring(1); // } } sb.append(py); } } return sb.toString(); } /** * 返回字符串的双拼.多音字只取第一个发音.每个字的首字母大写 * * @param s * @return */ public static String toShuangPin(String s) { if (s == null || s.length() == 0) { return null; } StringBuilder sb = new StringBuilder(); for (char c : s.toCharArray()) { String[] r = charToShuangPin(c); if (r == null) { sb.append(c); } else { String py = r[0]; if (py.length() > 0) { char f = Character.toUpperCase(py.charAt(0)); py = f + py.substring(1); } sb.append(py); } } return sb.toString(); } /** * 字符转化为五笔(86),无法转化返回null * * @param c * @return */ public static String[] charToWubi(char c) { if (c < 0x4E00 || c > 0x9FA5) {// GBK字库在unicode中的起始和结束位置 return null; } String result = wb86.getProperty(Integer.toHexString(c).toUpperCase()); if (result == null) { return null; } if (result.contains(",")) { return result.split(","); } else { return new String[] { result }; } } public static void main(String[] args) { System.out.println(toQuanPin("中华人民共和国--外交部")); System.out.println(toShuangPin("中华人民共和国--外交部")); System.out.println(toPinyinShouZiMu("中华人民共和国--外交部")); System.out.println(toShuangPin("壹仟贰佰叁拾肆亿伍仟陆佰柒拾捌万玖仟零壹拾贰元叁角肆分")); System.out.println(Arrays.deepToString(charToWubi('啊'))); System.out.println(Arrays.deepToString(charToWubi('A'))); System.out.println(Arrays.deepToString(charToWubi('工'))); } }
两个properties文件看附件,和工具类放在一个包下
输出结果:
ZhongHuaRenMinGongHeGuo--WaiJiaoBu
VsHwRfMnGsHeGo--WlJcBu
zhrmghg--wjb
YiQmRBlSjUiSiYiWuQmLuBlQiUiBaWjJqQmL;YiUiRYrSjJcSiFf
[kb, kbs, kbsk]
null
[a, aaa, aaaa]
- util.zip (45.3 KB)
- 下载次数: 198
发表评论
-
公约数,公倍数和素数的简单计算
2012-04-01 16:08 1324为自己留作备份,省得用到的时候再去寻找 简单的计算最大公约数 ... -
java简单打印
2012-03-08 09:56 1232没什么,就是一个简单的打印,留作存档 publi ... -
httpclient4的封装
2012-01-06 15:11 4633没什么特别的,自己封装着用的. package cpcns. ... -
h2的baseDir
2011-11-11 16:38 1462使用h2 1.3.161.在web项目中.计划在Listene ... -
eclipse下自动打包项目并部署到web项目的lib下
2011-10-18 15:59 5116修改web项目的.settings下的org.eclipse. ... -
五笔86和汉字对照表
2011-10-09 16:53 2528项目要用到汉字转拼音和五笔,拼音容易,使用pinyin4j. ... -
java System属性
2011-09-19 10:14 1385自定义 : java -Dname=value S ... -
log4j日志文件的相对路径
2011-09-01 10:51 6812一直没能很好的解决log4j的日志文件的保存路径.今天恰好又遇 ... -
Apache codec中的base64
2011-07-20 09:46 2283一直使用sun的base64,但是感觉不是很好,毕竟不是标准包 ... -
来,让我们一起画个印章吧
2011-07-04 14:52 4510这几天发现有哥们在介 ... -
svg中的arc转化为java中的arc
2011-05-27 15:31 2675最近项目需要解析svg中的path.直线和贝塞尔曲线都好办,唯 ... -
swing的拖拽(dnd)的简单实现
2011-03-28 10:18 2006这几天项目需要用到dnd,API比较麻烦.在网上找了很多,都只 ... -
自用的MD5计算工具
2011-03-11 15:45 1780/** * 检查输入流的MD5值是否符合.如果MD5为 ... -
用jsoup分析下载巨鲸的mp3
2011-02-25 15:37 1722这两天突然想听听杰克逊的歌.首选当然是巨鲸. 支持正版. ... -
获取子类的泛型参数
2011-01-27 16:03 1354用的时候不好找,今天看nutz的dao的源码看到了,摘出来备份 ... -
简单的通过注解运行的dao
2011-01-26 11:47 1787项目是个老项目,是个比较简单,但是编码比较凌乱的项目.数据库字 ... -
java模拟js的escape和unescape函数
2011-01-05 10:43 3467这个是在网上找的代码,然后修改了下.作用标题已经很明显了. ... -
自己写的多线程对象池
2010-12-10 16:53 1320/** * 排版器的一个公用接口 <br> ... -
apache poi读取excel中的颜色,真是坑爹啊
2010-12-01 16:23 16964工作原因,需要使用poi来读取excel中的所有内容. 其他 ... -
查找项目中实现接口的所有类
2010-11-15 13:45 5886最近为项目写了一个公式执行功能,其中函数太多,只能写了一个接口 ...
相关推荐
汉字拼写板的设计旨在提高汉字输入的效率和准确性,尤其对于非专业打字人员或者初学者来说,这类工具显得尤为重要。 1. **汉字输入法的发展历程**: - 从最初的机械式打字机到电子计算机的普及,汉字输入法经历了...
3. 汉字输入法:识别中文输入法的类型,比如全拼、双拼和五笔字型,并理解ASCII码不是汉字输入法。 4. 系统信息查看:掌握如何在Windows中查看硬件信息,例如处理器型号和内存容量,使用右键单击桌面“计算机”图标...
2. **汉字输入法**:学习计算机应用基础的过程中,掌握一种或多种汉字输入法是非常必要的,如拼音输入法(全拼、双拼)、五笔字型等,这些都是日常办公和沟通的基础工具。 3. **中文Windows XP操作系统**:这是微软...
汉字输入法是计算机在中国使用的关键技能,常见的输入法有拼音输入法(如全拼、双拼)、五笔字型等。学习一种输入法并熟练使用,可以提高中文输入效率。 【计算机安全与病毒防范】 计算机安全主要包括正确使用...
内置多种中文输入法,如首拼、全拼、双拼和英文输入,兼容各种第三方中文输入法,如五笔字型、智能ABC等。 3. **适应中文用户习惯**:日期时间格式、运算符等均采用中文形式,更符合中文用户的阅读习惯。此外,...
4. **设置优化**:调整输入法的细节设置,如候选词个数、输入模式(全拼、简拼、双拼等)、纠错功能、自动记忆等功能。 5. **界面定制**:允许用户选择输入法的皮肤,改变候选窗口的样式,以满足个人喜好。 6. **...
常见的有拼音输入法(如全拼、简拼)、五笔输入法、双拼输入法、手写输入法、语音输入法等。每种输入法都有其独特的编码规则和优化策略,适应不同的用户需求和输入习惯。 5. 构建与部署 文件名中的“build-desktop...
12. **汉字输入法**:ASCII码是一种字符编码,不属于汉字输入法,全拼、五笔字型和双拼是常见的汉字输入法。 13. **Windows应用**:“写字板”和“画图”都是Windows自带的应用,前者可以处理文字和简单图形,后者...
6. 中文Windows系统通常提供全拼、双拼等输入法,但不直接提供五笔字型输入法,用户需要额外安装五笔输入法软件。 7. Windows XP支持FAT32和NTFS文件系统,而不支持ext2,后者是Linux操作系统中常见的文件系统。 8...
15. **汉字输入法**:不同输入法包括区位码、全拼、双拼、五笔字型、自然码等,它们是汉字输入的不同方法。 16. **任务管理器**:通过按下Ctrl+Alt+Del组合键可以打开,用于管理运行中的应用程序和进程。 17. **...
- 音码:如全拼、双拼输入法。 - 形码:如五笔字型输入法。 - 音形码:如自然码输入法。 - **汉字处理码**: - 国标码用于处理汉字系统之间的信息交换。 - 输入码用于将汉字输入计算机。 - 内码用于处理汉字...
15. **汉字输入法种类**:区位、全拼双音、双拼双音、智能全拼、五笔字型和自然码是不同的汉字输入法。 16. **打开任务管理器**:同时按Ctrl + Alt + Del键。 17. **Windows XP窗口描述**:Windows XP桌面不是窗口,...
15. **汉字输入法**:区位码、全拼双音、双拼双音、智能全拼、五笔字型、自然码等是不同编码方式,用于输入汉字。 16. **打开任务管理器**:按下Ctrl + Alt + Del组合键,可以打开任务管理器,用于结束不响应的程序...