stringlibrary.cpp

来自「< Professional Java,JDK 5 Edition>」· C++ 代码 · 共 78 行

CPP
78
字号
// StringLibrary.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "..\StringExamples.h"

JNIEXPORT jboolean JNICALL Java_StringExamples_fastSearch
  (JNIEnv *env, jobject obj, 
   jstring stringToSearch, jstring stringToFind)
{
    const char *searchStr, *findStr;
    jboolean isSearchCopy, isFindCopy;

    searchStr = env->GetStringUTFChars(stringToSearch, &isSearchCopy);
    findStr = env->GetStringUTFChars(stringToFind, &isFindCopy);

    if(searchStr == NULL || findStr == NULL) {
		/* No memory to create string */
        return(false);
	}

    /* Don't forget to release the strings before returning */
    if(strstr(searchStr, findStr) != NULL) {
        env->ReleaseStringUTFChars(stringToSearch, searchStr);
        env->ReleaseStringUTFChars(stringToFind, findStr);
		return(true);
	} else {
        env->ReleaseStringUTFChars(stringToSearch, searchStr);
        env->ReleaseStringUTFChars(stringToFind, findStr);
		return(false);
	}
}

JNIEXPORT jstring JNICALL Java_StringExamples_replaceString
  (JNIEnv *env, jobject obj, 
   jstring _srcString, jstring _strToReplace, jstring _replString)
{
    const char *searchStr, *findStr, *replStr, *found;
    jstring newString = NULL;
    int index;

    searchStr = env->GetStringUTFChars(_srcString, NULL);
    findStr = env->GetStringUTFChars(_strToReplace, NULL);
    replStr = env->GetStringUTFChars(_replString, NULL);

    found = strstr(searchStr, findStr);

    if(found != NULL) {
        char *newStringTemp;

        index = found - searchStr;
        newStringTemp = 
            new char[strlen(searchStr) + strlen(replStr) + 1];

        strcpy(newStringTemp, searchStr);
        newStringTemp[index] = 0;
        strcat(newStringTemp, replStr);
        strcat(newStringTemp, &searchStr[index+strlen(findStr)]);

        newString = env->NewStringUTF((const char*)newStringTemp);
    }

    env->ReleaseStringUTFChars(_srcString, searchStr);
    env->ReleaseStringUTFChars(_strToReplace, findStr);
    env->ReleaseStringUTFChars(_replString, replStr);

    return(newString);
}

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?