这是我用来将 Java 字符串数组转换String[]
为 C++ 的代码vector<string>
:
void Java_com_domain_project_activity_stringArrToStringVector(JNIEnv *env, jobject obj, jobjectArray jstringArr) {
vector<string> stringVec;
// Get length
int len = env->GetArrayLength(jstringArr);
for (int i=0; i<len; i++) {
// Cast array element to string
jstring jstr = (jstring) (env->GetObjectArrayElement(jstringArr, i));
// Convert Java string to std::string
const jsize strLen = env->GetStringUTFLength(jstr);
const char *charBuffer = env->GetStringUTFChars(jstr, (jboolean *) 0);
string str(charBuffer, strLen);
// Push back string to vector
stringVec.push_back(str);
// Release memory
env->ReleaseStringUTFChars(jstr, charBuffer);
env->DeleteLocalRef(jstr);
}
}
在 Java 端,该函数将如下所示:
void stringArrToStringVector(String[] jstringArr);
最后,作为旁注,要将 Java 字符串列表转换为字符串数组(您将传递给您的 JNI 函数),您可以执行以下操作:
List<String> strList = new ArrayList<>();
// Populate strList
String[] strArr = new String[strList.size()];
strList.toArray(strArr);