中易网

如何用java 或C语言代码怎么实现如下功能:

答案:2  悬赏:20  
解决时间 2021-04-09 16:13
将文件中的字符串替换为某指定的字符串(replace)。文件3.txt中是一段待处理的字符串。
要求:
(1)用正则表达式把字符串中的大写字母以及其后面的3位数字替换为hello。
(2)将字符串中的非字母字符替换为“==”。
例如:
输入:
“ A123&45677@asdfhl8sdfl<ljioij+ljkl==lkjoijl$43hweo24”,则输出:
最佳答案
要在java中调用c语言的库,需要使用Java提供了JNI。
举例说明
在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.
现在分别从Java和C语言两部分说明:
1. Java 部分
首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native 类型的.如下:
public class HelloNative {
public native void sayHello();
}

编译这个类,生成class文件:
javac HelloWorld.java

利用javah生成需要的h文件
javah HelloNative

生成的 h文件大概如下:


#include <jni.h>


#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

可以看一下上面自动生成的程序,程序include了jni.h,这个头文件在 $JAVA_HOME下的include文件夹下. 还可以发现生成的函数名是在之前的函数名前面加上了Java_HelloNative。
2. C语言部分
根据上面生成的h文件编写相应的代码实现,建立一个 HelloNative.cpp用来实现显示Hello World的函数.如下:

#include <stdio.h>
#include "HelloNative.h"

JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)
{
printf("Hello World!\n");
}

代码编写完成之后,我们再用gcc编译成库文件,命令如下;
gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp

这样就会在当前目录下生成一个libHelloNative.so的库文件.这时需要的库已经生成,在C语言下的工作已经完成了.
接下来需要在Java中编写一个程序测试一下.在程序前,需要将我们的库载入进去.载入的方法是调用Java的 System.loadLibrary("HelloNative");

public class TestNative
{
static {
try {
System.loadLibrary("HelloNative");
}
catch(UnsatisfiedLinkError e) {
System.out.println( "Cannot load hello library:\n " + e.toString() );
}
}
public static void main(String[] args) {
HelloNative test = new HelloNative();
test.sayHello();
}
}

但是再编译后,运行的时候,问题又出现了.
Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
at HelloNative.sayHello(Native Method)
at TestNative.main(TestNative.java:13)

载入库失败,但是库明明就是放在当前文件夹下的,怎么会载入失败呢?
用System.getProperty("java.library.path")查看,发现java.library.path中并不u存在当前的目录.主要有以下的几个解决办法:
1) 将生成的库复制到java.library.path有的路径中去,当然这样不是很好
2) 设置环境变量export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,将当前的目录加入到LD_LIBRARY_PATH中
3) 设置java 的选项,将当前的目录加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH
这样之后程序就能够成功的运行了.可以看见显示的"Hello World!"了
全部回答
你这个不一定需要正则,用java代码也可以做到。。。遍历文本,进行一点规则性的处理而已。。。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
两腮肉多怎么办
杰克丹尼地址有知道的么?有点事想过去
济南公交车首班车几点?
如何做专利评级
为什么装了瑞星杀毒软件后桌面上的我的电脑打
最近看到一个叫微触角的微信第三方平台,有没
1名同学搬2把椅子,2名同学合搬一张桌子,一
田宫 四驱车底盘Evo.I 94734,能装奥迪牌子的
gc-ms的离子源温度和接口温度一样吗
焕海水产这个地址在什么地方,我要处理点事
物流公司定制快递单记入什么会计科目
梦幻西游合宝石赚钱吗?
ID被全贴吧禁封了怎么办?急!!!
北京拆迁律师赵健怎么样?
男生看见身材好的女生都会想入非非吗??
推荐资讯
女儿是独生子女。为什么母亲不支持女儿读书,
宝之佳幼儿园在哪里啊,我有事要去这个地方
红胡桃木材怎么样
Bacillus aryabhattai 怎么翻译呢?
PS磨皮工具那个好用啊。。。?
新买的房子地板上出现了几条裂缝,本来不太明
成飞幼儿园南门怎么去啊,有知道地址的么
中央音乐学院考级点在全国有哪些
青云店镇二村三支部委员会我想知道这个在什么
二极管1N4007的电阻是多少欧?
太原至兰州的列车11号还发车吗
一出哈尔滨机场大巴停在哪里呢
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?