centos下java调用opencc进行中文简体繁体转换

opencc源码安装

# git clone https://github.com/BYVoid/OpenCC
# cd OpenCC
[root@VM_130_110_centos OpenCC]# yum install doxygen

make

sudo make install

创建软链接

通过find / -name libopencc.so.2找到libopencc.so.2的路径,设置软链接。
[root@VM_130_110_centos OpenCC]# ln -s /usr/lib/libopencc.so.2 /usr/lib64/libopencc.so.2
[root@VM_130_110_centos OpenCC]# opencc --version

Open Chinese Convert (OpenCC) Command Line Tool
Version: 1.0.5

java调用opencc

方式一:通过shell

(1)编写shell脚本

#!/bin/sh
#echo $1
echo $1 |opencc -c s2tw

chmod +x opencc.sh

java调用shell

public static Object sc2tw(String content){
	try {
		StringBuffer sb = new StringBuffer("");
		Process ps = Runtime.getRuntime().exec("/usr/local/s2tw.sh \""+content+"\"");
		BufferedReader in = new BufferedReader(new InputStreamReader(ps.getInputStream()));
		String line = null;
		ps.waitFor();
		while((line = in.readLine())!=null){
			sb.append(line);
		}
		in.close();
		if(sb.indexOf("\"")==0){
			sb = sb.deleteCharAt(0);
		}
		if(sb.lastIndexOf("\"")==sb.length()-1){
			sb = sb.deleteCharAt(sb.length()-1);
		}
		ps.destroy();
		line = null;
		return sb;
	} catch (IOException e) {
		logger.error("shell执行出错");
	} catch (InterruptedException e) {
		logger.error("shell执行出错");
	}
	return content;
}

当shell脚本传入的参数特别大时,java会一直等待shell脚本执行完成,所以对于长度特别长的文本采用分段转换。

方式二:通过jni(这种方式我没有尝试,只是思路)

jni主要用来调用c/c++代码,

(1)首先创建一个Java类文件

import java.util.*;
public class TestJni
{
      //声明原生函数:参数为String类型
      public native void print(String content);
      //加载本地库代码     
      static
      {
           System.loadLibrary("TestJni"); //这个TestJni是后面生成
      }
}

(2)生成TestJni.h文件

编译 TestJni.java文件:javac TestJni.java
javah -jni TestJni

(3)创建TestJni.c文件

#include <jni.h>
#include <stdio.h>
#include <TestJni.h>

JNIEXPORT void JNICALL
      Java_TestJni_print(JNIEnv *env,jobject obj, jstring content)
{
//这里面的内容应该改成调用opencc的方法

      // 从 instring 字符串取得指向字符串 UTF 编码的指针
      //注意C语言必须(*env)->         C++ env->
      const jbyte *str =
           (const jbyte *)(*env)->GetStringUTFChars(env,content, JNI_FALSE);
      printf("Hello---->%s\n",str);

      // 通知虚拟机本地代码不再需要通过 str 访问 Java 字符串。
    (*env)->ReleaseStringUTFChars(env, content, (const char *)str );

    return;
}

(4)生成libTestJni.so库文件

生成的这个so库文件要让Java工程可以找到。

(5)其它Java类调用TestJni类中的方法即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值