java工具类,支持中文简体转香港繁体、台湾繁体,繁体转简体;

代码如下:

package translate;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Map;

import java.util.Properties;

import java.util.Set;

/**

* 类名称:HKTWwordVO

* 类描述:香港、台湾字体库

*

* @author wangsen

* 创建时间:2018年5月15日 下午4:12:39

*

*/

public class HKTWwordVO {

/** 所有词汇 */

private Properties charMap = new Properties();

/** 高频词汇 */

private Set conflictingSets = new HashSet();

/** 繁体_台湾 */

public static final int TAIWAN = 0;

/** 繁体_香港 */

public static final int HONGKONG = 1;

/** 简体 */

public static final int SIMPLE = 2;

private static final int NUM_OF_CONVERTERS = 3;

private static final HKTWwordVO[] converters = new HKTWwordVO[NUM_OF_CONVERTERS];

private static final String[] propertyFiles = new String[NUM_OF_CONVERTERS];

static {

propertyFiles[TAIWAN] = "taiwan.properties"; // 台湾

propertyFiles[HONGKONG] = "hongkong.properties"; // 香港

propertyFiles[SIMPLE] = "simple.properties"; // 简体

}

public static void main(String[] args) {

String str = "钩子里面是关注";

// 转台湾繁体

String convert = HKTWwordVO.convert(str, HKTWwordVO.TAIWAN);

System.out.println(convert);

// 转香港繁体

convert = HKTWwordVO.convert(str, HKTWwordVO.HONGKONG);

System.out.println(convert);

// 繁体转简体

String convert2 = HKTWwordVO.convert("鉤子裡面是關注、鈎子裏面是關注", HKTWwordVO.SIMPLE);

System.out.println(convert2);

}

/**

*

* @param converterType

* 0 for traditional and 1 for simplified

* @return

*/

public static HKTWwordVO getInstance(int converterType) {

if (converterType >= 0 && converterType < NUM_OF_CONVERTERS) {

if (converters[converterType] == null) {

synchronized (HKTWwordVO.class) {

if (converters[converterType] == null) {

converters[converterType] = new HKTWwordVO(

propertyFiles[converterType]);

}

}

}

return converters[converterType];

} else {

return null;

}

}

public static String convert(String text, int converterType) {

HKTWwordVO instance = getInstance(converterType);

return instance.convert(text);

}

private HKTWwordVO(String propertyFile) {

InputStream is = null;

is = getClass().getResourceAsStream(propertyFile);

// File propertyFile = new

// File("C:/Temp/testMDB/TestTranslator/abc.txt");

if (is != null) {

BufferedReader reader = null;

try {

reader = new BufferedReader(new InputStreamReader(is));

charMap.load(reader);

} catch (FileNotFoundException e) {

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

try {

if (reader != null)

reader.close();

if (is != null)

is.close();

} catch (IOException e) {

}

}

}

initializeHelper();

}

@SuppressWarnings("rawtypes")

private void initializeHelper() {

Map stringPossibilities = new HashMap();

Iterator iter = charMap.keySet().iterator();

while (iter.hasNext()) {

String key = (String) iter.next();

if (key.length() >= 1) {

for (int i = 0; i < (key.length()); i++) {

String keySubstring = key.substring(0, i + 1);

if (stringPossibilities.containsKey(keySubstring)) {

Integer integer = (Integer) (stringPossibilities

.get(keySubstring));

stringPossibilities.put(keySubstring, new Integer(

integer.intValue() + 1));

} else {

stringPossibilities.put(keySubstring, new Integer(1));

}

}

}

}

iter = stringPossibilities.keySet().iterator();

while (iter.hasNext()) {

String key = (String) iter.next();

if (((Integer) (stringPossibilities.get(key))).intValue() > 1) {

conflictingSets.add(key);

}

}

}

public String convert(String in) {

StringBuilder outString = new StringBuilder();

StringBuilder stackString = new StringBuilder();

for (int i = 0; i < in.length(); i++) {

char c = in.charAt(i);

String key = "" + c;

stackString.append(key);

if (conflictingSets.contains(stackString.toString())) {

} else if (charMap.containsKey(stackString.toString())) {

outString.append(charMap.get(stackString.toString()));

stackString.setLength(0);

} else {

CharSequence sequence = stackString.subSequence(0,

stackString.length() - 1);

stackString.delete(0, stackString.length() - 1);

flushStack(outString, new StringBuilder(sequence));

}

}

flushStack(outString, stackString);

return outString.toString();

}

private void flushStack(StringBuilder outString, StringBuilder stackString) {

while (stackString.length() > 0) {

if (charMap.containsKey(stackString.toString())) {

outString.append(charMap.get(stackString.toString()));

stackString.setLength(0);

} else {

outString.append("" + stackString.charAt(0));

stackString.delete(0, 1);

}

}

}

String parseOneChar(String c) {

if (charMap.containsKey(c)) {

return (String) charMap.get(c);

}

return c;

}

}

java utf8 简繁转换 类库_java简繁转换(区分港台)相关推荐

  1. java utf8 简繁转换 类库_JAVA简繁转换(对象)解决办法

    JAVA简繁转换(对象) 目前已实现普通字符串的转换代码如下: static String jtPy = "简体字库"; static String ftPy = "繁體 ...

  2. java utf8 简繁转换 类库_Java封装简体繁体(香港台湾)转换工具

    简体繁体转换 新建工具类:HKTWwordVO import java.io.BufferedReader; import java.io.FileNotFoundException; import ...

  3. java 错误日期转正确日期_Java日期格式转换-错误的月份

    我在用Java转换日期时遇到问题,不知道我要去哪里错了... String dateStr = "2011-12-15"; String fromFormat = "yy ...

  4. java 错误日期转正确日期_java – jdk8日期转换中的错误?

    我正在为java.util.Date和java.time.LocalDateTime之间的java-8转换编写一些测试代码,发现异常似乎发生在从正常时间到夏季的转换后的一小时内,当年是2038年或更高 ...

  5. java把字符转成浮点_java 字符型转换成浮点型

    1.字符串转化为整形.浮点类型 String s = "100"; //方法一 int a = Integer.parseInt(String s); Long.parseLong ...

  6. java整形变量转换字符串_JAVA整型转换字符串以及相互转换的相关实例

    JAVA整型转换字符串以及相互转换的相关实例.java数据类型之间的转换.怎么把整数 int 转换成字串 String ?怎么把字符串 String 转换成整数 int类型? 整型与字符串转换实例: ...

  7. java字符类的英文表示_java 字符串截取类 区分中文、英文、数字、标点符号

    package com.founder.fix.ims; /** * @author WANGYUTAO * 操作字符串 */ public class SubString { // public s ...

  8. java utf8 简繁转换 类库,java 中文繁简体转换工具 opencc4j

    创作缘由 对于中文的繁简体转换是一种很常见的需求. 但是很多工具类都是简单的做个映射.(使用map,集合,properties)等. 存在一个严重的问题:特殊词组 的转换可能存在问题. OpenCC ...

  9. 简繁 data_gb.php 下载,简繁转换的程序_php

    php代码:-------------------------------------------------------------------------------- /** *中速版,中等内存 ...

最新文章

  1. python源代码-python源码
  2. php-fpm进程数优化方法
  3. sql server2008中左连接,右连接,等值连接的区别
  4. hadoop入门-在windows上编译x64位hadoop
  5. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)
  6. js slice 参数为负值
  7. 力扣401.二进制手表
  8. 录音整理文字工具otranscribe简介
  9. 如何下载和安装 iOS开发教程
  10. java分页计算_java分页算法
  11. hadoop 查看集群的网页监控状态
  12. 搭建一个简单的服务器
  13. 真正“自学”入门编程/程序员是一种怎样的体验?
  14. 从乘客丢钱包的报警处理过程谈职业化和专业化
  15. Android热修复技术——QQ空间补丁方案解析(1)
  16. C++春招实习和秋招面试过程记录
  17. python自学笔记15之实例之绘图、dataframe操作、读写csv,excle
  18. mysql 查看等待事件_分享两个实用SQL--查看故障时间等待事件、问题sql及会话访问次数...
  19. 2.ECMAScript6详解
  20. c语言%.6s和%6s的差别,iPhone 6s与iPhone 7的差别 看完全懂了!

热门文章

  1. linux图形界面压缩软件,p7zip 压缩软件 for Linux
  2. python中有数组吗_python中有数组吗
  3. Prometheus_additional传统配置
  4. 计算机毕业设计Python+uniapp+安卓移动LYQ电子商城APP(WEB+APP+LW)
  5. 宠物粮赛道拥挤,波奇、中宠、佩蒂、三只松鼠们如何赶风口?
  6. 算法——猴子分桃问题
  7. V2V-PoseNet:Voxel-to-Voxel Prediction Network for Accurate 3D Hand and Human Pose Estimation from...
  8. 在虚拟机上搭建云平台环境(2)Controller和Computer系统安装
  9. 软件测试面试复习题(一)
  10. request java获取参数body_@RequestBody参数已经被读取,究竟是何原因?