java 中文繁简体转换工具框架 opencc4j 入门介绍

合集下载

java中文参考手册

java中文参考手册

java中文参考手册Java是一种广泛应用于各种领域的编程语言,它具有跨平台、面向对象、高效等特点。

自1995年由Sun公司推出以来,Java在全球范围内得到了众多开发者的喜爱。

本手册将为您介绍Java的基本概念、编程技巧以及相关工具和资源。

一、Java简介与历史Java语言诞生于1995年,由詹姆斯·高斯林领导的研究团队开发。

Java的初衷是为了解决C++语言中复杂、易错、低效的问题,设计出一门简单、安全、高效的编程语言。

Sun公司(已被甲骨文公司收购)将其作为核心产品推广,并逐步发展出Java虚拟机(JVM)、Java企业版(J2EE)等系列技术。

二、Java编程基础1.数据类型与变量:Java中有基本数据类型(如int、float、double、boolean等)和引用数据类型(如类、数组和接口)。

变量是用于存储数据的标识符,需要声明其数据类型和初始值。

2.运算符与表达式:Java支持算术、关系、逻辑等运算符,以及赋值、条件、逗号等表达式。

3.控制结构:Java的控制结构包括顺序、分支(如if、switch)和循环(如for、while、do-while)等。

4.函数与方法:函数是一段封装了特定功能的代码,可以通过参数和返回值与调用者进行交互。

方法是类中定义的功能模块,可以用于执行特定操作。

三、Java面向对象编程1.类与对象:类是面向对象编程的基本单元,包含属性和方法。

对象是类的实例,通过创建对象,我们可以调用类中定义的方法来实现具体功能。

2.封装、继承与多态:封装是将数据和操作封装在一起,提高代码的可维护性。

继承是子类继承父类的属性和方法。

多态是指子类可以根据需要覆盖或实现父类的方法,使得不同的对象可以以统一的接口进行操作。

3.接口与内部类:接口是一组方法的声明,可以用于定义类之间的契约。

内部类是定义在另一个类内部的类,可以访问外部类的成员。

四、Java常用类库1.字符串操作:Java提供了许多字符串操作方法,如字符串匹配、替换、截取等。

java全拼转汉字的方法

java全拼转汉字的方法

java全拼转汉字的方法Java全拼转汉字的方法在Java编程中,有时候我们需要将汉字转换为全拼的拼音形式。

这在一些需要对中文进行处理的应用中非常常见,比如搜索引擎的关键词匹配、拼音输入法等。

本文将介绍一种将汉字转为全拼的方法。

Java中有一个开源库叫做pinyin4j,它是一个汉字转拼音的Java 类库,可以将中文转换为拼音,并且还支持多音字的处理。

现在我们就来学习一下如何使用pinyin4j将汉字转换为全拼拼音。

我们需要引入pinyin4j的依赖。

可以使用Maven来管理项目依赖,只需要在pom.xml文件中添加以下依赖代码即可:```xml<dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>```引入依赖之后,我们就可以开始使用pinyin4j进行汉字转拼音的操作了。

下面是一个简单的示例代码:```javaimport net.sourceforge.pinyin4j.PinyinHelper;public class PinyinConverter {public static String convertToPinyin(String chinese) {StringBuilder pinyin = new StringBuilder();char[] chars = chinese.toCharArray();for (char c : chars) {String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c);if (pinyins != null && pinyins.length > 0) {pinyin.append(pinyins[0]);} else {pinyin.append(c);}}return pinyin.toString();}public static void main(String[] args) {String chinese = "中文转拼音";String pinyin = convertToPinyin(chinese);System.out.println(pinyin);}}```在上面的示例代码中,我们定义了一个名为PinyinConverter的类,其中包含了一个名为convertToPinyin的静态方法。

java刚入门需要学什么-学习java的步骤

java刚入门需要学什么-学习java的步骤

java刚入门需要学什么-学习java的步骤java刚入门,首先要学习java的基础知识。

比如:Java源程序(.java文件)——java字节码文件(.class文件)——由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——字节码文件(.class)就会在java虚拟机中执行。

1、所谓万变不离其宗,掌握好基础才是关键,首先要学习java 的基础知识。

不要被新技术困惑,所谓万变不离其宗,新技术都是基于java的基础之上,如果基础不扎实,关于这些新技术的理解也是一知半解,学不到根源。

2、在学习完java的基础知识之后,去做一个java项目来巩固一下,在项目中会发现很多问题,通过解决问题,加深基础知识的掌握。

3、学习数据库的基础知识和开发应用,软件开发离不了数据库,掌握几种流行的数据库:Oracle、SQLserver、MySQL等。

4、JEE基础,在这里首先要学习网站基础,包括HTML、DHTML、JavaScript;接着要学习XML,XML JAXP;然后学习JEE基础,包括JEE开发环境,RMI/IIOP、JNDI;最后学习JDBC数据库的应用开发。

5、web开发,全面的JEE的web开发知识:Servlet JSP javaBeanTagLib,到这里做一个完整的web应用项目开发。

6、EJB开发,包涵全面的EJB知识:EJB入门和无状态会话Bean;有状态会话Bean;BMP和CMP是实体Bean;jms和MessageDrivenBean;事物和安全(JTA、JTS和JAAS);WebService 的开发和应用。

7、开源框架的学习,学习几种现在流行的开源框架:Struts、Spring、Hibernian、Webwork等。

完整的学习这些框架的开发和应用。

如果有兴趣还可以学习Ibati框架、AJAX技术和DWR框架的开发和应用。

8、JEE项目,综合应用JEE的知识来开发一个完整的应用。

Java汉字转拼音库,Pinyin4j

Java汉字转拼音库,Pinyin4j

Java汉字转拼⾳库,Pinyin4jpinyin4j是⼀个⽀持将简体和繁体中⽂转换到成拼⾳的Java开源类库,作者是Li Min ()。

以下是⼀些具体的介绍和使⽤⽅式。

2.下载解压后的⽬录结构及说明如下(1) doc : pinyin4j的api⽂档(2) lib : pinyin4j的jar包(3) src : pinyin4j的源代码(4) CHANGELOG.txt: pinyin4j的版本更新⽇志(5) COPYING.txt: LICENSE说明(6) README.txt : pinyin4j的概要介绍3.运⾏GUI demo命令⾏执⾏cd ${pinyin-install-dir}/lib,进⼊到pinyin4j-2.5.0.jar所在的⽬录,敲⼊java -jar pinyin4j-2.5.0.jar执⾏,GUI界⾯如下:上图是输⼊汉字“中”,执⾏Convert to Pinyin后的截图。

Format后有三个下拉框,第⼀个下拉框有三个选项,⽤来控制⽣成的拼⾳声调的显⽰⽅式,三个⽅式及其效果如下(以汉字“中”,选中Formatted hanyu Pinyin选项卡测试):WITH_TONE_NUMBER(以数字代替声调) : zhong1 zhong4WITHOUT_TONE(⽆声调) : zhong zhongWITH_TONE_MARK (有声调) : zhōng zhòng第⼆个下拉框是碰到unicode的ü、v和 u时的显⽰⽅式,共有三个⽅式,以下是以声调为WITH_TONE_NUMBER⽅式显⽰汉字“吕”⽰例:WITH_U_AND_COLON : lu:3WITH_V: lv3WITH_U_UNICODE : lü3第三个下拉框是控制⽣成的拼⾳是以⼤写⽅式显⽰还是以⼩写⽅式显⽰,以汉字“国”⽰例如下:LOWERCASE:guóUPPERCASE:GUÓ上图的汉字转化成拼⾳后,有六种显⽰⽅式,这是因为pinyin4j⽀持将汉字转化成六种拼⾳表⽰法。

java基础框架知识点总结

java基础框架知识点总结

java基础框架知识点总结一、Spring框架Spring框架是一个轻量级的开源框架,由于其强大的功能和良好的设计理念而成为Java 企业级应用的首选框架之一。

Spring框架主要包括以下几个部分:1. IoC容器IoC(Inversion of Control)即控制反转,是Spring框架的核心概念。

在传统的应用程序中,对象的创建和管理通常由程序员来完成,而在Spring框架中,对象的创建和管理由容器来完成。

通过IoC容器,我们可以实现依赖注入(DI),即将某个对象的依赖注入到另一个对象中。

这种方式可以大大降低组件之间的耦合度,提高代码的可维护性和可扩展性。

2. AOPAOP(Aspect-Oriented Programming)即面向切面编程,是Spring框架的另一个重要特性。

通过AOP,我们可以将一些通用的功能(如日志记录、事务管理等)抽象出来,然后通过切点和通知将这些功能应用于不同的业务逻辑中。

这种方式可以使代码更加模块化,减少重复代码的编写。

3. JDBC模板Spring框架提供了JDBC模板来简化数据库操作。

通过JDBC模板,我们可以不再需要编写繁琐的JDBC代码,而是直接调用模板的方法来完成数据库操作。

这样可以大大简化代码的编写,并且提高了代码的可维护性。

4. 面向切面编程Spring框架提供了面向切面编程(AOP)的支持,可以方便地实现横切关注点的功能,如事务管理、日志记录、性能监控等。

5. Spring MVCSpring MVC是Spring框架的一个子模块,用于构建Web应用程序。

它基于MVC (Model-View-Controller)设计模式,可以很方便地将业务逻辑、数据模型和用户界面分离开来,并且支持RESTful风格的API。

6. Spring BootSpring Boot是Spring框架的又一个子模块,用于快速构建基于Spring框架的应用程序。

通过Spring Boot,我们可以方便地搭建基于Spring框架的应用程序,并且可以自动化配置和快速部署。

opencc设计思路

opencc设计思路

opencc设计思路全文共四篇示例,供读者参考第一篇示例:随着全球化的发展,人们越来越关注不同语言之间的交流和沟通。

为了让这种交流更加顺畅和便利,开发了一款开放源代码的中文简繁转换工具--OpenCC。

OpenCC的设计思路主要包括以下几个方面:1. 开放源代码:OpenCC是一款开源软件,这意味着任何人都可以查看、使用、修改和分享它的源代码。

这种开放性不仅意味着用户可以免费获取到这款软件,还意味着开发者们可以共同合作,不断优化和改进OpenCC的功能。

2. 简单易用:OpenCC致力于提供一个简单易用的中文简繁转换工具,让用户能够轻松地进行简繁体之间的转换。

用户可以通过简单的命令行操作或者图形化界面来使用OpenCC,无需复杂的设置步骤,即可完成转换。

3. 高效快速:OpenCC采用了一系列高效的算法和数据结构,以确保转换的速度和效率。

通过对繁简字典的优化和压缩,OpenCC能够在瞬间完成大量文本的简繁体转换,满足用户对快速转换的需求。

4. 多样化支持:OpenCC支持多种文本格式的简繁转换,包括纯文本、网页、Office文档等。

用户可以根据自己的需求选择不同的转换模式,以便更好地适应不同的应用场景。

5. 不断更新:为了保持软件的持续发展和改进,OpenCC团队会定期发布更新版本,修复bug,增加新功能和优化现有功能。

用户可以通过软件自动更新功能或者访问官方网站来获取最新的版本信息。

第二篇示例:OpenCC是一个开源的简体字和繁体字之间的转换库,它采用Python语言编写,提供了简单易用的API和命令行工具,可以帮助开发者在不同语种之间进行文本的转换。

本文将详细介绍OpenCC的设计思路和原理。

首先,OpenCC的设计目标是实现简体字和繁体字之间的快速且准确的转换,它不仅支持最基本的字词的转换,还能够处理复杂的词语和成语等。

为了实现这一目标,OpenCC采用了一种算法,通过对繁体字和简体字之间的映射关系进行建模,从而实现文本的转换。

opencc 用例

opencc 用例

opencc 用例
OpenCC转换工具可以用于将中文繁体和简体之间的转换,以下是一个简单的用例:
1. 打开OpenCC的官方网站,下载并安装OpenCC。

2. 打开OpenCC应用程序,选择“繁简转换”功能。

3. 在“繁简转换”功能中,输入要转换的简体或繁体中文文本。

4. 选择要转换的目标语言(简体或繁体),然后单击“转换”按钮。

5. OpenCC将自动将输入的文本转换为目标语言的繁体或简体文本。

6. 复制转换后的文本,并将其用于所需的用途。

请注意,OpenCC转换工具可能存在一定的误差率,因此在使用转换结果之前,请务必仔细检查以确保准确性。

繁简体字符串转化的JAVA方式实现

繁简体字符串转化的JAVA方式实现

繁简体(GB<=>Big5)字符串转化的JAVA方式实现本文提供一个java实现中文字符繁简体互换的zip包以及主要的源代码实现说明。

繁简体(GB<=>Big5)中文字符的转化实现原理很简单,就是根据两种码表的编码规则,创建两者之间的字符对应关系表,通过程序读取这个映射表来自动查出另一种编码方式下对应字符的字节编码,从而进行逐字节的内容替换。

主功能实现的GB2Big5.java源代码如下:查看复制到剪切板打印1.package net.java2000.tools;2.3.import java.io.BufferedOutputStream;4.import java.io.FileOutputStream;5.import java.io.IOException;6.import java.io.InputStream;7.8./**9. * 用来处理GB2312/BIG5码字符互相转换的类.<br>10. * 需要两个码表文件: gb-big5.table,/zeal/util/big5-gb.table.<br>11. * 这两个码表可以根据具体情况补充映射不正确的码.12. */13.public class GB2Big5 {14.private static GB2Big5 pInstance = null;15.16.private String s_big5TableFile = null;17.18.private String s_gbTableFile = null;19.20.private byte[] b_big5Table = null;21.22.private byte[] b_gbTable = null;23.24./** 指定两个码表文件来进行初始化 */25.private GB2Big5(String sgbTableFile, String sbig5TableFile)throws NullPointerException {26. s_big5TableFile = sbig5TableFile;27. s_gbTableFile = sgbTableFile;28.if (null == b_gbTable) {29. b_gbTable = getBytesFromFile(sgbTableFile);30. }31.if (null == b_big5Table) {32. b_big5Table = getBytesFromFile(sbig5TableFile);33. }34.if (null == b_gbTable) {35.throw new NullPointerException("No gb table can be load");36. }37.if (null == b_big5Table) {38.throw new NullPointerException("No big5 table can be load");39. }40. }41.42.public static synchronized GB2Big5 getInstance() {43.// return getInstance("d:\\gb-big5.table","d:\\big5-gb.table");44.return getInstance("/net/java2000/tools/gb-big5.table", "/net/java2000/tools/big5-gb.table");45. }46.47.public static synchronized GB2Big5 getInstance(String sgbTableFile, String sbig5TableFile) {48.if (null == pInstance) {49.try {50. pInstance = new GB2Big5(sgbTableFile, sbig5TableFile);51. } catch (Exception e) {52. System.err.println(e.toString());53. pInstance = null;54. }55. }56.return pInstance;57. }58.59./**60. * 把gbChar对应的big5字符替换掉,用来更新码表文件. 一般当发现字符映射不正确的时候可以通过这个方法来校正.61. */62.protected synchronized void resetBig5Char(String gbChar, String big5Char) throws Exception {63.byte[] Text = new String(gbChar.getBytes(), "GBK").getBytes("GBK");64.byte[] TextBig5 = new String(big5Char.getBytes(), "BIG5").getBytes("BIG5");65.int max = Text.length - 1;66.int h = 0;67.int l = 0;68.int p = 0;69.int b = 256;70.for (int i = 0; i < max; i++) {71. h = (int) (Text[i]);72.if (h < 0) {73. h = b + h;74. l = (int) (Text[i + 1]);75.if (l < 0) {76. l = b + (int) (Text[i + 1]);77. }78.if (h == 161 && l == 64) {79. ; // do nothing80. } else {81. p = (h - 160) * 510 + (l - 1) * 2;82. b_gbTable[p] = TextBig5[i];83. b_gbTable[p + 1] = TextBig5[i + 1];84. }85. i++;86. }87. }88. BufferedOutputStream pWriter = new BufferedOutputStream(new FileOutputStream(s_gbTableFile));89. pWriter.write(b_gbTable, 0, b_gbTable.length);90. pWriter.close();91. }92.93./**94. * 把big5Char对应的gb字符替换掉,用来更新码表文件. 一般当发现字符映射不正确的时候可以通过这个方法来校正.95. */96.protected synchronized void resetGbChar(String big5Char, String gbChar) throws Exception {97.byte[] TextGb = new String(gbChar.getBytes(), "GBK").getBytes("GBK");98.byte[] Text = new String(big5Char.getBytes(), "BIG5").getBytes("BIG5");99.int max = Text.length - 1;100.int h = 0;101.int l = 0;102.int p = 0;103.int b = 256;104.for (int i = 0; i < max; i++) {105. h = (int) (Text[i]);106.if (h < 0) {107. h = b + h;108. l = (int) (Text[i + 1]);109.if (l < 0) {110. l = b + (int) (Text[i + 1]);111. }112.if (h == 161 && l == 64) {113. ; // do nothing114. } else {115. p = (h - 160) * 510 + (l - 1) * 2;116. b_big5Table[p] = TextGb[i];117. b_big5Table[p + 1] = TextGb[i + 1];118. }119. i++;120. }121. }122. BufferedOutputStream pWriter = new BufferedOutputStrea m(new FileOutputStream(s_big5TableFile));123. pWriter.write(b_big5Table, 0, b_big5Table.length); 124. pWriter.close();125. }126.127./** 把gb2312编码的字符串转化成big5码的字节流 */128.public byte[] gb2big5(String inStr) throws Exception {129.if (null == inStr || inStr.length() <= 0) {130.return"".getBytes();131.// return "";132. }133.byte[] Text = new String(inStr.getBytes(), "GBK").getB ytes("GBK");134.int max = Text.length - 1;135.int h = 0;136.int l = 0;137.int p = 0;138.int b = 256;139.byte[] big = new byte[2];140.for (int i = 0; i < max; i++) {141. h = (int) (Text[i]);142.if (h < 0) {143. h = b + h;144. l = (int) (Text[i + 1]);145.if (l < 0) {146. l = b + (int) (Text[i + 1]);147. }148.if (h == 161 && l == 64) {149. big[0] = big[1] = (byte) (161 - b);150. } else {151. p = (h - 160) * 510 + (l - 1) * 2;152.try {153. big[0] = (byte) (b_gbTable[p] - b);154. } catch (Exception e) {155. big[0] = 45;156. }157.try {158. big[1] = (byte) (b_gbTable[p + 1] - b); 159. } catch (Exception e) {160. big[1] = 45;161. }162. }163. Text[i] = big[0];164. Text[i + 1] = big[1];165. i++;166. }167. }168.return Text;169.// return new String(Text);170. }171.172./** 把big5码的字符串转化成gb2312码的字符串 */173.public String big52gb(String inStr) throws Exception {174.if (null == inStr || inStr.length() <= 0) {175.return"";176. }177.byte[] Text = new String(inStr.getBytes(), "BIG5").get Bytes("BIG5");178.int max = Text.length - 1;179.int h = 0;180.int l = 0;181.int p = 0;182.int b = 256;183.byte[] big = new byte[2];184.for (int i = 0; i < max; i++) {185. h = (int) (Text[i]);186.if (h < 0) {187. h = b + h;188. l = (int) (Text[i + 1]);189.if (l < 0) {190. l = b + (int) (Text[i + 1]);191. }192.if (h == 161 && l == 161) {193. big[0] = (byte) (161 - b);194. big[1] = (byte) (64 - b);195. } else {196. p = (h - 160) * 510 + (l - 1) * 2;197.try {198. big[0] = (byte) (b_big5Table[p] - b);199. } catch (Exception e) {200. big[0] = 45;201. }202.try {203. big[1] = (byte) (b_big5Table[p + 1] - b); 204. } catch (Exception e) {205. big[1] = 45;206. }207. }208. Text[i] = big[0];209. Text[i + 1] = big[1];210. i++;211. }212. }213.return new String(Text);214. }215.216./** 把文件读入字节数组,读取失败则返回null */217.private static byte[] getBytesFromFile(String inFileName ) {218.try {219. InputStream in = GB2Big5.class.getResourceAsStream(i nFileName);220.byte[] sContent = StreamConverter.toByteArray(in);221. in.close();222.return sContent;223./*224. * java.io.RandomAccessFile inStream = new java.io.R andomAccessFile(inFileName,"r"); byte[] sContent = new byte[ ( int)225. * (inStream.length())]; inStream.read(sContent); in Stream.close(); return sContent;226. */227. } catch (Exception e) {228. e.printStackTrace();229.return null;230. }231. }232.233.public static void main(String[] args) throws Exception {234.if (args.length < 2) {235. System.out.println("Usage: net.java2000.tools.GB2Big5 [-gb | -big5] inputstring");236. System.exit(1);237.return;238. }239.boolean bIsGB = true;240. String inStr = "";241.for (int i = 0; i < args.length; i++) {242.if (args[i].equalsIgnoreCase("-gb")) {243. bIsGB = true;244. } else if (args[i].equalsIgnoreCase("-big5")) { 245. bIsGB = false;246. } else {247. inStr = args[i];248. }249. }250. GB2Big5 pTmp = GB2Big5.getInstance();251. String outStr = "";252.if (bIsGB) {253. outStr = pTmp.big52gb(inStr);254. } else {255. outStr = new String(pTmp.gb2big5(inStr), "BIG5"); 256. }257. System.out.println("String [" + inStr + "] converted i nto:\n[" + outStr + "]");258. }259.}260.261.class StreamConverter {262.public StreamConverter() {263. }264.265.public static byte[] toByteArray(InputStream input) thro ws IOException {266.int status = 0;267.int totalBytesRead = 0;268.int blockCount = 1;269.byte dynamicBuffer[] = new byte[5000 * blockCount]; 270.byte buffer[] = new byte[5000];271.boolean endOfStream = false;272.do {273.if (endOfStream)274.break;275.int bytesRead = 0;276.if (input.available() != 0) {277. status = input.read(buffer);278. endOfStream = status == -1;279.if (!endOfStream)280. bytesRead = status;281. } else {282. status = input.read();283. endOfStream = status == -1;284. buffer[0] = (byte) status;285.if (!endOfStream)286. bytesRead = 1;287. }288.if (!endOfStream) {289.if (totalBytesRead + bytesRead > 5000 * blockCount ) {290. blockCount++;291.byte newBuffer[] = new byte[5000 * blockCount];292. System.arraycopy(dynamicBuffer, 0, newBuffer, 0, totalBytesRead);293. dynamicBuffer = newBuffer;294. }295. System.arraycopy(buffer, 0, dynamicBuffer, totalBy tesRead, bytesRead);296. totalBytesRead += bytesRead;297. }298. } while (true);299.byte result[] = new byte[totalBytesRead];300.if (totalBytesRead != 0)301. System.arraycopy(dynamicBuffer, 0, result, 0, totalB ytesRead);302.return result;303. }304.}。

javacc学习手册

javacc学习手册

1Javacc安装1.安装jdk,安装完成后设置环境变量PATH路径。

2.下载javacc,直接在其官方网站上下载,地址https://。

例如下载的是4.0版本的zip包javacc-4.0.zip。

3.解压缩javacc-4.0.zip到任意目录,将其bin目录设置为环境变量PATH路径。

4.运行如下命令查看是否正常安装Javacc versionJavacc copyright infojavacc option-settings inputfile2Javacc工具和生成分析程序的原理介绍2.1 三个工具(或可执行的命令) :1.javacc 用来处理语法文件(jj)生成分析器代码;JavaCC运行程序读入用JavaCC语法编写的源程序(后缀名为*.jj),即某一语言的词法规则、文法规则以及与该文法规则相联系的语义动作说明(Java代码段),就能生成Java代码的该文法的词法分析器和语法分析器。

而且,这些生成的程序在运行时不再需要JavaCC的任何支持。

2.jjtree 用来处理jjt文件,生成树节点代码和jj文件,然后再通过javacc生成解析代码;3.jjdoc 根据jj文件生成bnf范式文档(html)2.2 javacc的特性●自顶向下(TOP-DOWN):JavaCC生成自顶向下的分析器(分析程序),这是与YACC等工具所产生的自底向上的分析器所不同的。

●大的用户群(LARGE USER COMMUNITY):JavaCC是目前为止,最为流行的Java语言编写的分析器程序,并且已经有成千上万的使用者。

●词法&语法规范集成(LEXICAL AND GRAMMAR SPECIFICATION IN ONE FILE):像正则表达式、字符串等这样的词法规范和语法规范(.BNF)都将写在同一个文件中。

这将使得该语法规则更加容易阅读同时容易维护。

●语法树预处理器(TREE BUILDING PREPROCESSOR):JavaCC与JJTree同时发布,JJTree是一个功能强大的语法树预处理器。

java 中文繁简体转换工具框架 opencc4j 入门介绍

java 中文繁简体转换工具框架 opencc4j 入门介绍

opencc4jOpencc4j支持中文繁简体转换,考虑到词组级别。

Features 特點•嚴格區分「一簡對多繁」和「一簡對多異」。

•完全兼容異體字,可以實現動態替換。

•嚴格審校一簡對多繁詞條,原則爲「能分則不合」。

•詞庫和函數庫完全分離,可以自由修改、導入、擴展。

•兼容 Windows、Linux、Mac 平臺。

•支持 jdk1.7(v1.0.3)•支持自定义分词(v1.1.0)V1.2.0 版本新特性•支持判断单个字(词)是否为简体/繁体•支持返回分词后的列表信息•支持返回字符串中简体/繁体的列表信息测试代码见 test 文件夹。

可以用来学习相关方法的使用方式。

快速开始maven 引入<dependency><groupId>com.github.houbb</groupId><artifactId>opencc4j</artifactId><version>1.2.0</version></dependency>转为简体String original = "生命不息,奮鬥不止";String result = ZhConverterUtil.convertToSimple(original);结果为生命不息,奋斗不止转为繁体String original = "生命不息,奋斗不止";String result = ZhConverterUtil.convertToTraditional(original);结果为生命不息,奮鬥不止其他支持上述两个方法都默认使用的花瓣分词,都有第二个参数,是否启用花瓣分词。

如果不启用,则默认使用普通的一个 char 作为一个转换的对象。

(不建议,唯一的优势性能好一点,但是准确性不行)/***转换为简体* @param original 原始内容*@param huabanSegment 是否花瓣分词*@return 转换后的内容*/public static String convertToSimple(String original, boolean huabanSeg ment);引导类方式为什么需要引导类v1.1.0 之后引入了类ZhConvertBootstrap可以提供更加灵活的功能,支持 fluent 语法。

java繁体中文处理完全攻略--简体中文参照操作即可

java繁体中文处理完全攻略--简体中文参照操作即可

java繁体中文处理完全攻略--简体中文参照操作即可Java 繁体中文处理完全攻略许多人用Java 处理到中文资料时,常会出现乱码。

关于Java 和中文兼容性的问题,实在让许多程序员为此伤透脑筋,相关的问题每隔几天就会出现在网络上。

为了舒缓您紧蹙的眉头,我特别写了这系列文章,解说Java 牵涉到文字时的内部处理方式,供读者参考。

读完本系列文章之后,不求甚解者可以治标,充分理解者可以治本。

本文贵在原理解说,别光是囫囵吞枣。

快速解决之道如果你目前正遭遇到Java 和中文不兼容的问题,请你注意下面这几点,说不定问题能马上迎刃而解:1. 检查操作系统设定:先检查你的操作系统,确定国籍语言资料是「Traditional Chinese(Taiwan)」。

国籍语言资料的设定会影响Java 编译器与JRE的判断。

我之前就是因为国籍资料设定不正确,出了一堆Java 和中文不兼容的怪事。

2. 更新Java 环境版本:改用最新版的JDK,新版本的JDK 说不定已经解决你原有的问题。

请注意:某些Java IDE 所用的编译器和JRE 是不兼容于中文的(我遇过这样的情形),你最好能把Java IDE 的JDK 指到新版的JDK。

另外,如果数据库取回的资料是乱码,换别套或者更新JDBC 驱动程序试试看。

如果还是无法解决,请详细阅读下面各小节的内容,仔细推敲你的错误所在。

Unicode、UTF-16、UTF-8Java 内部处理字符使用的字序方式是Unicode,这是一种通行全球的编码方式。

Unicode 因为必须将中、韩、日、英、法、阿拉伯&#8230;&#8230;等许多国家所使用的文字都纳入,目前已经包含了六万多个字符,所以Unicode 使用了16 个位来为字符编码。

因为Unicode 使用了16 位编码,所以每个字符都用16 位来储存或传输是很自然的事,这种储存或传输的格式称为UTF-16(是不是很像战斗机的名字)。

Java基础入门教程(适合所有初学者)

Java基础入门教程(适合所有初学者)
第 1 章 Java 语言概述与面向对象思想 1.1 Java 语言的发展 1.1.1 Java 语言的产生 上世纪 90 年代初期,Sun 公司在研究一种适用于未来的智能设备的编程语言,该语言要具有 一些新的特性,以避免 C++的一些不足。 该语言起初命名为 Oak,来源于语言作者 Gosling 办公室窗外的一棵橡树(Oak)。后来在注 册时候遇到了冲突,于是就从手中的热咖啡联想到了印度尼西亚一个盛产咖啡的岛屿,中文 名叫爪哇,Java 语言得名于此。 随着 Internet 的迅速发展,Web 应用日益广泛,Java 语言也得到了迅速发展。1994 年,Gosling 用 Java 开发了一个实时性较高、可靠、安全、有交互功能的新型 Web 浏览器,它不依赖于任 何硬件平台和软件平台。这种浏览器名称为 HotJava,并于 1995 年同 Java 语言一起,正式 在业界对外发表,引起了巨大的轰动,Java 的地位随之而得到肯定。此后的发展非常迅速。 Java 编程语言的句法与 C++的句法相似,语义则与 Small Talk TM 的语义相似。Java 编程语
加载代码——由类加载器执行 类加载器为程序的执行加载所需要的全部类(尽可能而未必同时)。
校验代码——由字节码校验器执行 Java 代码在实际运行之前要经过几次测试。字节码校验器对程序代码进行四遍校验,这可以 保证代码符合 JVM 规范并且不破坏系统的完整性。如--检查伪造指针、违反对象访问权限 或试图改变对象类型的非法代码。
垃圾收集就是将不再需要的已分配内存块回收。 在其它一般的语言中,取消分配是程序员的责任。 Java 编程语言提供了一种系统级线程以跟踪存储区分配,来完成垃圾收集: 可检查和释放不再需要的存储块 可自动完成上述工作 可在 JVM 实现周期中,产生意想不到的变化 良好的代码健壮性 Java 能够检查程序在编译和运行时的错误。类型检查能帮助用户检查出许多在开发早期出现 的错误。同时很多集成开发工具(IDE)的出现使编译和运行 Java 程序更加容易,并且很多 集成开发工具(如 Eclipse)都是免费的。

java代码实现简体繁体转换

java代码实现简体繁体转换

java代码实现简体繁体转换汉字分为简体和繁体字,这是众所周知的,虽然繁体字中国⼤陆这边⽤的并不会太多,但时不时的还是会使⽤到。

那么,如何做到简体字和繁体字的转换呢?其实很简单,这⾥附上⼀个java版本的简繁体转换,⽤⽹上找的实现的,⾮常简洁,省去不少⿇烦,直接上代码:package com.xiaocongjisuan.module.example;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import .HttpURLConnection;import .URL;import .URLEncoder;import java.util.HashMap;import java.util.Map;public class Application {public static final String DEF_CHATSET = "UTF-8";public static final int DEF_CONN_TIMEOUT = 30000;public static final int DEF_READ_TIMEOUT = 30000;public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";//配置您申请的appKey和openIdpublic static final String APP_KEY ="yours";public static final String OPEN_ID ="yours";//将map型转为请求参数型public static String urlEncode(Map<String,Object> params) {if(params==null){return "";};StringBuilder sb = new StringBuilder();for (Map.Entry<String,Object> i : params.entrySet()) {try {sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}String r=sb.toString();if(r.endsWith("&")){r = r.substring(0,r.length()-1);}return r;}/**** @param requestUrl 请求地址* @param params 请求参数* @param method 请求⽅法* @return 请求结果* @throws Exception*/public static String requestContent(String requestUrl, Map<String,Object> params,String method) throws Exception {HttpURLConnection conn = null;BufferedReader reader = null;String rs = null;try {//组装请求链接StringBuffer sb = new StringBuffer();if(method!=null&&method.equalsIgnoreCase("get")){requestUrl = requestUrl+"?"+urlEncode(params);}//默认getURL url = new URL(requestUrl);conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");if(method!=null&&method.equalsIgnoreCase("post")){conn.setRequestMethod("POST");conn.setDoOutput(true);conn.setDoInput(true);}//参数配置conn.setRequestProperty("User-agent", userAgent);conn.setUseCaches(false);conn.setConnectTimeout(DEF_CONN_TIMEOUT);conn.setReadTimeout(DEF_READ_TIMEOUT);conn.setInstanceFollowRedirects(false);conn.connect();if (params!= null && method.equalsIgnoreCase("post")) {try {DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(urlEncode(params));} catch (Exception e) {e.printStackTrace();}}//读取数据InputStream is = conn.getInputStream();reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));String strRead = null;while ((strRead = reader.readLine()) != null) {sb.append(strRead);}rs = sb.toString();} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {reader.close();}if (conn != null) {conn.disconnect();}}return rs;}public static void main(String[] args) throws Exception{String domain="/";String servlet="life/simtrachinese/convert";String method="get";String requestUrl=domain+servlet;Map<String,Object> params=new HashMap<String,Object>();params.put("appKey",APP_KEY);params.put("openId",OPEN_ID);//变动部分params.put("simpleChinese","我是⼀只⼩⼩鸟");params.put("tradtionalChinese","⽂學家的故事是這樣的");String result=requestContent(requestUrl,params,method);System.out.println(result);}}php的代码实现如下:<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><?php/*** @author* @copyright 2019*/header("content-type:text/html;charset=utf-8"); //设置编码//配置您申请的appKey和openId$app_key = "***";$open_id = "***";/**$url 请求地址$params 请求参数$ispost 请求⽅法*/function http_curl($url,$params=false,$ispost=false){$httpInfo = array();$ch = curl_init();curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 ); curl_setopt( $ch, CURLOPT_USERAGENT , "xiaocongjisuan");curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );curl_setopt( $ch, CURLOPT_TIMEOUT , 60);curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );if( $ispost ){curl_setopt( $ch , CURLOPT_POST , true );curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );curl_setopt( $ch , CURLOPT_URL , $url );}else{if($params){curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );}else{curl_setopt( $ch , CURLOPT_URL , $url);}}$response = curl_exec( $ch );if ($response === FALSE) {//echo "cURL Error: " . curl_error($ch);return false;}$httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );$httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );curl_close( $ch );return $response;}function main(){global $app_key;global $open_id;$domain="/";$servlet="life/simtrachinese/convert";$method="get";$url=$domain."".$servlet;$params['appKey']=$app_key;$params['openId']=$open_id;//变动部分$params["simpleChinese"]="我是⼀只⼩⼩鸟";$params["tradtionalChinese"]="⽂學家的故事是這樣的";//编码转换foreach ($params as $key=>$value) {$params[$key]=mb_convert_encoding($value, "UTF-8", "GBK");}$paramstring = http_build_query($params);$content = http_curl($url,$paramstring,true);return $content;}echo main();>其他代码的实现⽅式可以,感谢阅读。

javacc 基础知识

javacc 基础知识

javacc在简要讨论了语法、解析器和BNF 后,本文将介绍JavaCC,这是一个流行的解析器生成器工具。

您将开发使用JavaCC 的样本代码来构建定制的解析器,先从语法的BNF 描述开始。

第2 部分将接着演示如何使用辅助工具—JJTree 来构建同一解析的解析树表示,以及如何在运行时遍历该树,以发现其状态信息。

文章将以开发构建和遍历解析树的样本代码作为结束,该解析树是您为一小部分XQuery 语法生成的。

要完成最简单的日常解析任务,您不需要使用象自动化解析器生成器那样复杂的任何东西。

例如,同“梳理”CSV(逗号分割的值,Comma-Separated-Value)文件的各部分同样简单的编程练习需要了解文件的结构,可能还需要了解如何使用Java StringTokenizer。

另外,CSV 练习还需要了解很少的解析理论知识或者将自动化工具应用于任务的需求。

但是,一旦正式描述它的某种语言和语法变得复杂,那么语言中的有效表达式数量将迅速增加。

而能够手工处理将任意表达式解析成其组成部分(这或多或少是解析更简明的定义)所需的代码将变得越来越困难。

自动化解析器生成器减轻了这种困难。

其他程序员或许也可以将您生成的解析器用于他们自己的用途。

从BNF 开始复杂语言的语法通常都是使用BNF(巴科斯-诺尔范式,Backus-Naur Form)表示法或者其“近亲”— EBNF(扩展的BNF)描述的。

自动化工具可以使用那些描述(我将使用通用的术语BNF来指代这两种变体)或与它们近似的描述来为您生成解析代码。

本文就描述了这样的一种解析器-生成器工具,称为JavaCC。

我将简要地研究一下JavaCC 的基本知识,并在结束的时候花些时间研究一下它的一个辅助工具—JJTree,但是在讨论中不会介绍太多的理论知识,以免偏离主题。

本文力图阐明我的理念:您并不需要了解很多有关正规的解析理论就能进行解析!为什么使用JavaCC 呢?有几个原因:我对XQuery 有着强烈的兴趣,而W3C 的XML Query 工作组恰好使用JavaCC 来构建并测试XQuery 语法的版本,并且构建和测试它与XSL 组共享的XPath 语法。

java编程入门基础教程

java编程入门基础教程

java编程入门基础教程Java是一种面向对象的编程语言,广泛用于开发各种应用程序和系统。

本文将介绍Java编程的基础知识,帮助读者入门。

首先,我们需要了解Java的环境设置。

要开始Java编程,你需要先下载和安装Java Development Kit(JDK)。

JDK包括Java编译器和虚拟机,它们是Java程序的运行和编译所必需的。

Java程序由类组成,每个类都有一组变量和方法。

变量用来存储数据,而方法用来执行操作。

编写一个Java程序首先需要定义一个类,并在类中编写主方法。

主方法是Java程序执行的起点。

Java中有许多基本的数据类型,如整数类型(int)、浮点数类型(float、double)、字符类型(char)和布尔类型(boolean)。

你可以使用这些数据类型声明变量,并在程序中进行计算和操作。

Java提供了许多运算符,可以用于进行数学计算和逻辑判断。

例如,加法运算符(+)用于对两个数值进行相加,比较运算符(>、<、==)用于比较两个数值的大小。

控制流语句是编程中非常重要的一部分。

Java提供了条件语句(if-else)和循环语句(for、while)来控制程序的执行流程。

条件语句可以根据条件的真假来执行不同的代码块,而循环语句可以重复执行一段代码多次。

在Java中,你可以创建对象并调用对象的方法。

对象是类的一个实例,具有自己的状态和行为。

通过创建对象并调用对象的方法,你可以完成各种任务,并实现各种功能。

Java还提供了许多强大的类库(如Java标准库和第三方库),可以帮助你快速开发各种功能。

这些类库包括了很多现成的类和方法,可以用来完成各种常见的任务,如文件操作、网络通信、图形界面等。

最后,值得一提的是,Java是一种跨平台的编程语言。

这意味着你可以编写一次Java程序,然后在不同的操作系统上运行,而不需要对程序进行修改。

这一特性使得Java成为企业级应用开发的首选语言。

Docx4J知识积累

Docx4J知识积累

D o c x4J知识积累(总15页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除Docx4J概述:Docx4j是Java操作office2007+中的Word、Excel、PPT的开源项目,其主要针对WordXML同时也可以处理Excel和PPT,比POI要强大很多.Docx4J基于开源协议ASLv2。

ASL是一个广泛适用于社区开源软件并被开源业界所认可的协议,该协议更有益于商业化产品的开发和再发行。

遵循ASL发行的代码和其它许可协议可以整合成为一个闭源的商业产品,然后被其它开发人员再次发行。

这不像开源许可协议。

"类GPL许可协议"(有些像GPL),通常情况下用于确保其它类似开发成员再发行已经被发布并修改的代码及其衍生代码的开源和可发布性。

Docx4J能做什么:1.打开已存在docx(从文件系统、SMB/CIFS、使用VFS的WebDAV),pptx,xlsx2.创建新的docx、pptx、xlsx3.编程式地操作上面打开的文档Docx4J特殊的功能支持:1.模版替换;CustomXML绑定2.生产/消费Word2007的xmlPackage(pkg)格式3.作为docx保存docx到文件系统(zipped)或者保存到JCR(unzipped)4.应用转换,包括常见过滤器5.作为HTML或者PDF导出6.比较文档、段落或者sdt(内容控件)之间的差异7.字体支持(字体替换及使用任何文档中嵌入的字体)一些有用的链接:Docx4J:Sample codes:docx4j, pptx4j, xlsx4j,生成docx文件(第一部分),生成docx文件(第二部分),使用docx4j编程式地创建复杂的Word(.docx)文档,向Docx4j生成的word文档添加图片和布局--第一部分,向Docx4j生成的word文档中添加布局--第二部分docx4j -- 使用Java处理word2007(.docx)文档Docx4J的使用Docx4J概述:Docx4j是Java操作office2007+中的Word、Excel、PPT的开源项目,其主要针对WordXML同时也可以处理Excel和PPT,比POI要强大很多.Docx4J基于开源协议ASLv2。

java中文参考手册

java中文参考手册

java中文参考手册(实用版)目录1.Java 简介2.Java 的特点3.Java 的应用领域4.Java 开发环境搭建5.Java 基础语法6.Java 面向对象编程7.Java 异常处理8.Java 集合框架9.Java 多线程编程10.Java 网络编程11.Java 数据库操作12.Java Web 开发13.Java 企业级框架14.Java 移动应用开发15.Java 未来发展趋势正文【Java 简介】Java 是一种广泛使用的计算机编程语言,由 Sun Microsystems 公司于 1995 年推出。

Java 的特点在于跨平台性、安全性、简单性、面向对象和可移植性。

Java 可以运行在多个平台上,如 Windows、Linux、MacOS 等,因此受到广泛欢迎。

【Java 的特点】Java 具有以下特点:1.跨平台性:Java 可以在不同的操作系统上运行,因为 Java 代码会被编译成与平台无关的字节码,然后通过 Java 虚拟机(JVM)运行。

2.安全性:Java 提供了沙箱机制,使得在其内部运行的程序受到一定程度的隔离和限制,从而保护系统安全。

3.简单性:Java 简化了 C++中复杂的概念,如指针、内存管理等,使得编程更容易掌握。

4.面向对象:Java 是一种面向对象的编程语言,支持封装、继承、多态等特性,有助于提高代码的可重用性和可维护性。

5.可移植性:Java 程序可以在不同的平台上运行,前提是这些平台都安装有 Java 虚拟机。

【Java 的应用领域】Java 广泛应用于企业级应用、Web 开发、移动应用开发、嵌入式系统、大数据处理、云计算等领域。

其中,Java EE(Java Platform Enterprise Edition)提供了一系列企业级应用开发的标准,如 EJB、JMS、JPA 等。

【Java 开发环境搭建】要开始 Java 开发,首先需要安装 Java 开发工具包(JDK),然后配置环境变量。

Java编程语言入门教程

Java编程语言入门教程

Java编程语言入门教程在计算机科学领域,Java是一种广泛应用的编程语言,它具有简单易学、可移植性强和丰富的类库等优点,因此成为了许多程序员入门的首选。

本文将为大家介绍Java编程语言的入门教程,包括基础语法、面向对象、异常处理和输入输出等内容,希望能够为初学者提供一些帮助和指导。

Java是一种面向对象的编程语言,它基于一种被称为Java虚拟机的执行环境。

因此,在进行Java程序编写之前,我们需要安装Java Development Kit (JDK),该软件包包括了编写、编译和运行Java程序所需的基本工具。

安装完成后,我们就可以开始编写我们的第一个Java程序了。

Java程序主要由类组成,每个Java程序必须包含一个名为"main"的方法,该方法作为程序的入口点。

在程序中,我们可以使用System.out.println()方法打印输出到控制台,这是Java中常用的一种输出方式。

除了基本的输出功能外,Java还支持基本的数据类型,如整数、浮点数、布尔值等。

为了更好地处理数据,Java还提供了丰富的数据结构和算法,如数组、容器类等。

通过这些数据结构和算法,我们可以方便地进行数据的存储和处理。

在Java中,面向对象是非常重要的概念。

面向对象编程的核心思想是将现实世界中的事物抽象成类,通过定义属性和方法来描述其特征和行为。

通过使用类和对象,我们可以很容易地创建和管理复杂的程序。

在Java中,我们可以使用关键字"class"来定义类,然后通过"new"关键字创建对象。

除了基本的类和对象之外,Java还支持继承和多态等特性,这些特性使得代码的复用性和灵活性更高。

通过继承,我们可以创建一个新类,该类继承了现有类的属性和方法。

通过多态,我们可以在不同的情况下使用不同的对象,从而达到更好的代码组织和管理。

在编程过程中,我们经常会遇到各种各样的异常。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

opencc4jOpencc4j支持中文繁简体转换,考虑到词组级别。

Features 特點•嚴格區分「一簡對多繁」和「一簡對多異」。

•完全兼容異體字,可以實現動態替換。

•嚴格審校一簡對多繁詞條,原則爲「能分則不合」。

•詞庫和函數庫完全分離,可以自由修改、導入、擴展。

•兼容 Windows、Linux、Mac 平臺。

•支持 jdk1.7(v1.0.3)•支持自定义分词(v1.1.0)V1.2.0 版本新特性•支持判断单个字(词)是否为简体/繁体•支持返回分词后的列表信息•支持返回字符串中简体/繁体的列表信息测试代码见 test 文件夹。

可以用来学习相关方法的使用方式。

快速开始maven 引入<dependency><groupId>com.github.houbb</groupId><artifactId>opencc4j</artifactId><version>1.2.0</version></dependency>转为简体String original = "生命不息,奮鬥不止";String result = ZhConverterUtil.convertToSimple(original);结果为生命不息,奋斗不止转为繁体String original = "生命不息,奋斗不止";String result = ZhConverterUtil.convertToTraditional(original);结果为生命不息,奮鬥不止其他支持上述两个方法都默认使用的花瓣分词,都有第二个参数,是否启用花瓣分词。

如果不启用,则默认使用普通的一个 char 作为一个转换的对象。

(不建议,唯一的优势性能好一点,但是准确性不行)/***转换为简体* @param original 原始内容*@param huabanSegment 是否花瓣分词*@return 转换后的内容*/public static String convertToSimple(String original, boolean huabanSeg ment);引导类方式为什么需要引导类v1.1.0 之后引入了类ZhConvertBootstrap可以提供更加灵活的功能,支持 fluent 语法。

对比静态方法的优势工具类的静态方法使用起来很方便,但是不是很利于拓展变化。

后期想添加更多的方法,就会发现静态方法开始有些不够优雅,方法数量也会变得较多。

所以自定义分词没有暴露静态方法,建议用户根据 ZhConvertBootstrap 灵活创建属于自己的工具类。

引导类使用案例和工具类类似。

•转为简体final String original = "生命不息,奮鬥不止";final String result = ZhConvertBootstrap.newInstance().toSimple(origina l);Assert.assertEquals("生命不息,奋斗不止", result);•转为繁体final String original = "生命不息,奋斗不止";final String result = ZhConvertBootstrap.newInstance().toTraditional(or iginal);Assert.assertEquals("生命不息,奮鬥不止", result);自定义分词方式用途你有时候可能除了上述的两种分词方式,会有更加适合自己业务的分词实现。

Opencc4j 支持自定义分词实现。

自定义只需要实现分词接口Segment•接口内容public interface Segment {/***分词* @param original 原始信息*@return 分词后的列表*/List<String> seg(final String original);}备注:默认使用的是花瓣分词测试代码•自定义分词实现类/***一个最简单的分词实现。

*注意:仅仅做演示,不可实际使用。

* @author binbin.hou*@since 1.1.0*/public class FooSegment implements Segment {@Overridepublic List<String> seg(String original) {return Arrays.asList(original, "测试");}}•分词测试我们自定义的分词,直接在默认添加“测试”这样的信息。

final String result2 = ZhConvertBootstrap.newInstance().segment(new Foo Segment()).toTraditional(original);Assert.assertEquals("寥落古行宮,宮花寂寞紅。

白頭宮女在,閒坐說玄宗。

測試", result2);•创建时指定分词器你可以在创建引导类的时候,直接指定分词器实现。

final String original = "寥落古行宫,宫花寂寞红。

白头宫女在,闲坐说玄宗。

"; final String result = ZhConvertBootstrap.newInstance(new FooSegment()). toTraditional(original);Assert.assertEquals("寥落古行宮,宮花寂寞紅。

白頭宮女在,閒坐說玄宗。

測試", result);V1.2.0 新特性使用说明获取分词列表•方法/***获取分词后的字符串列表*(1)如果原始字符串为空,则返回空列表* @param original 原始字符串*@return 字符串列表*@since 1.2.0*/List<String> doSeg(final String original);•测试final String original = "生命不息奋斗不止";final List<String> resultList = ZhConvertBootstrap.newInstance().doSeg (original);String expectToString = "[生命不息, 奋斗, 不止]";Assert.assertEquals(expectToString, resultList.toString());判断是否为繁体•方法/***是否为繁体*1. 原始字符串为空,直接返回 false*2.如果长度为1,则根据繁体字列表中是否存在,直接返回结果*3.如果长度大于1,则判断繁体词组类表中是否存在,如果为 true,则直接返回。

*4.如果3为 false,则继续判断分成单个字进行判断,如果每一个字都是繁体,则认为是繁体。

*@param charOrPhrase 单个字或者词组*@return true:是; false:否*@since 1.2.0*/boolean isTraditional(final String charOrPhrase);•测试final String simpleChar = "奋";final String simplePhrase = "奋斗";final String traditionalChar = "奮";final String traditionalPhrase = "奮鬥";ZhConvertBootstrap convertBootstrap = ZhConvertBootstrap.newInstance(); Assert.assertTrue(convertBootstrap.isTraditional(traditionalChar)); Assert.assertTrue(convertBootstrap.isTraditional(traditionalPhrase)); Assert.assertFalse(convertBootstrap.isTraditional(simpleChar)); Assert.assertFalse(convertBootstrap.isTraditional(simplePhrase));判断是否为简体•方法/***是否为简体*(1)原始字符串为空,直接返回 false*(2)其他情况,则和{@link #isTraditional(String)}取反* @param charOrPhrase 单个字或者词组*@return true:是; false:否*@since 1.2.0*/boolean isSimple(final String charOrPhrase);•测试final String simpleChar = "奋";final String simplePhrase = "奋斗";final String traditionalChar = "奮";final String traditionalPhrase = "奮鬥";ZhConvertBootstrap convertBootstrap = ZhConvertBootstrap.newInstance(); Assert.assertTrue(convertBootstrap.isSimple(simpleChar));Assert.assertTrue(convertBootstrap.isSimple(simplePhrase));Assert.assertFalse(convertBootstrap.isSimple(traditionalChar));Assert.assertFalse(convertBootstrap.isSimple(traditionalPhrase));返回简体字符串列表•方法/***返回简体字列表*说明:返回{@link #doSeg(String)}列表中符合{@link #isSimple(String)}的字符串列表* @param original 原始字符串列表*@return 包含的简体字符串列表*@since 1.2.0*/List<String> simpleList(final String original);•测试final String original = "生命不息奋斗不止";ZhConvertBootstrap zhConvertBootstrap = ZhConvertBootstrap.newInstance ();final List<String> resultList = zhConvertBootstrap.simpleList(original); String expectToString = "[生命不息, 奋斗, 不止]";Assert.assertEquals(expectToString, resultList.toString());返回繁体字符串列表•方法/***返回繁体字列表*说明:返回{@link #doSeg(String)}列表中符合{@link #isTraditional(Str ing)}的字符串列表* @param original 原始字符串列表*@return 包含的繁体字符的列表*@since 1.2.0*/List<String> traditionalList(final String original);•测试final String original = "生命不息奮鬥不止";ZhConvertBootstrap zhConvertBootstrap = ZhConvertBootstrap.newInstance ();final List<String> resultList = zhConvertBootstrap.traditionalList(orig inal);String expectToString = "[奮鬥]";Assert.assertEquals(expectToString, resultList.toString());。

相关文档
最新文档