本篇内容主要讲解“Java怎么实现简体繁体转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么实现简体繁体转换”吧!
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 兮赫
* Created by 2020-08-24 18:52
*/
public class HKTWwordVO {
/** 所有词汇 */
private Properties charMap = new Properties();
/** 高频词汇 */
private Set<String> conflictingSets = new HashSet<String>();
/** 繁体_台湾 */
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<String, Integer> stringPossibilities = new HashMap<String, Integer>();
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怎么实现简体繁体转换”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/manlu/blog/4532976