这是一个“愚蠢的问题:可以在 JNI 中比较两个 jstrings 吗?如果可以,如何比较?
最佳答案
你有 2 个选项(我假设你想比较平等...)
- 将两个 jstrings 转换为 wstrings 并比较
- 调用 jstring 的 equals 方法(但是这需要调用 JVM 几次,因此会比选项 1 慢。)
对于选项 1,您想尝试如下操作。我没有选项 2 的源代码。
警告 我还没有编译它,甚至没有测试它,但你可能想要这样的东西。如果 java 字符串包含除 ASCI 字符以外的任何内容,我认为其中存在错误。我也没有做任何错误检查。
jbyteArray bytes = 0;
jclass localClass = env->FindClass("java/lang/String");
jmethodID methodID = env->GetMethodID(localClass, "getBytes", "()[B");
bytes = (jbyteArray)env->CallObjectMethod( jstr, methodID);
jint len = env->GetArrayLength( bytes);
char* data = new char[len+1];
env->GetByteArrayRegion( bytes, 0, len,(jbyte *)data);
data[len] = 0;
std::wstring result(data);
对第二个jstring
做同样的事情,然后比较2个std::wstring
的
关于c++ - JNI 中的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2599407/