Java中文简体繁体转换

项目路径如下

项目路径如下

附件下载

使用方法如下:

public class Translation {

    public static void main(String[] args) {
                ZHConverter converter = ZHConverter.getInstance(ZHConverter.SIMPLIFIED);
                //繁体转换简体
                String traditionalSrc = "核心提示:澳大利亞FAXTS新聞3月5日刊登評論認為,美國在全球一系列被解釋成用來防禦來自伊朗和朝鮮導彈襲擊的彈道導彈防禦系統的部署行為,以及最近將先進具有反導能力愛國者導彈出售給台灣的動作,其根本目的是針對兩個主要的核大國--中國和俄羅斯。";
                String simplified = converter.convert(traditionalSrc);
                System.out.println(simplified);
                //简体转换繁体    
                String traditional = ZHConverter.convert(simplified,ZHConverter.TRADITIONAL);
                System.out.println(traditional);    
    }
}

附上ZHConverter代码:

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;

public class ZHConverter {
    private Properties charMap = new Properties();
    private Set<String> conflictingSets  = new HashSet<String>();
    public static final int TRADITIONAL = 0;
    public static final int SIMPLIFIED = 1;
    private static final int NUM_OF_CONVERTERS = 2;
    private static final ZHConverter[] converters = new ZHConverter[NUM_OF_CONVERTERS];
    private static final String[]  propertyFiles = new String[2];
    static {
        propertyFiles[TRADITIONAL] = "zh2Hant.properties"; //附件下载
        propertyFiles[SIMPLIFIED] = "zh2Hans.properties";  //附件下载
    }

    /**
     *
     * @param converterType 0 for traditional and 1 for simplified
     * @return
     */
    public static ZHConverter getInstance(int converterType) {
        if (converterType >= 0 && converterType < NUM_OF_CONVERTERS) {
            if (converters[converterType] == null) {
                synchronized(ZHConverter.class) {
                    if (converters[converterType] == null) {
                        converters[converterType] = new ZHConverter(propertyFiles[converterType]);
                    }
                }
            }
            return converters[converterType];
        } else {
            return null;
        }
    }

    public static String convert(String text, int converterType) {
        ZHConverter instance = getInstance(converterType);
        return instance.convert(text);
    }


    private ZHConverter(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;
    }
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Java中有一个非常常用的繁简转换库叫做opencc-java,它可以实现简体繁体繁体简体、香港繁体简体简体转台湾繁体等多种转换方式,而且支持转换结果的保存和读取。 此外,对于中文转拼音,Java中也有一个很常用的库叫做pinyin4j,它可以将汉字转换为拼音,并支持多种拼音风格的转换。pinyin4j的使用也非常简单,只需要将其jar包导入项目中,然后在代码中调用相关API即可。 以下是opencc-java和pinyin4j的使用示例: 1. 使用opencc-java进行简繁转换 ```java import com.github.houbb.opencc4j.util.ZhConverterUtil; public class Demo { public static void main(String[] args) { String simplified = "简体中文"; String traditional = ZhConverterUtil.convertToTraditional(simplified); // 简体中文 -> 簡體中文 System.out.println(traditional); String hongKongTraditional = ZhConverterUtil.convertToHongKongTraditional(traditional); // 簡體中文 -> 繁體香港 System.out.println(hongKongTraditional); String taiwanTraditional = ZhConverterUtil.convertToTaiwanTraditional(traditional); // 簡體中文 -> 繁體台灣 System.out.println(taiwanTraditional); String simplified2 = ZhConverterUtil.convertToSimple(taiwanTraditional); // 繁體台灣 -> 簡體中文 System.out.println(simplified2); } } ``` 2. 使用pinyin4j进行中文转拼音 ```java import net.sourceforge.pinyin4j.PinyinHelper; public class Demo { public static void main(String[] args) { String chinese = "中华人民共和国"; String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(chinese); // 中华人民共和国 -> zhōng huá rén mín gòng hé guó for (String s : pinyin) { System.out.print(s + " "); } } } ``` 以上就是使用opencc-java和pinyin4j进行繁简转换中文转拼音的示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值