2016-07-05 21 views
-1

如何比較C language.I 2個jstrings什麼需要這個了邏輯是寫在.c文件。如果你想使用比較兩個名的jstring做對比

+0

是你的朋友與西普拉卡什? –

+3

http://stackoverflow.com/q/38204771/2173917 –

回答

2

JNI執行純天然:

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString1, jstring javaString2) 
{ 
    const char *nativeString1 = (*env)->GetStringUTFChars(env, javaString1, 0); 
    const char *nativeString2 = (*env)->GetStringUTFChars(env, javaString2, 0); 

    /* Now you can compare nativeString1 with nativeString2*/ 
    int res = strncmp(nativeString1, nativeString2, strlen(nativeString1); 

    /* And don't forget to release the handles */ 

    (*env)->ReleaseStringUTFChars(env, javaString1, nativeString1); 
    (*env)->ReleaseStringUTFChars(env, javaString2, nativeString2); 
} 

如果你想使用Java從本地代碼(相同的答案this one都歸功於原作者):

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString1, jstring javaString2) 
{ 
    /* Get java class String handle */ 
    jclass cls = (*env)->GetObjectClass(env, javaString1); 
    /* Get method ID equals from String handle */ 
    jmethodID mID = (*env)->GetMethodID(env, cls, "equals", "(Ljava/lang/Object;)Z"); 
    /* Compare both methods, store in jboolean which can be case to uint8_t or bool if you're using C99*/ 
    jboolean equals = (*env)->CallBooleanMethod(env, javaString1, mID, javaString2); 
}