文字列の分割操作(strtok,split)


一:strtok
C/C++:char *strtok(char s[], const char *delim);
sは分割が必要な文字列を表し、delimは分割のフラグを表し、パラメータはすべて比選です!分割部を指すポインタを返し、分割に成功しなければNULLを返す.
簡単な例です.
void main()
{
	char *str = "jscese test strtok";
	char *delim = " ";
	char *pstr = NULL;
	pstr = strtok(str, delim);
	printf("the first str==%s 
", pstr); while ((pstr = strtok(NULL, delim)) != NULL) { printf("the next str==%s
", pstr); } }

以上、1回目以降の分割を見て、またパスを続けるパラメータは
NULLは、strtokが分割したフラグ位置を
/0
分割後の文字列:jscese/0 test/0 strtok
従って、以降の先頭ポインタの位置はいずれも/0であるため、NULLが伝達される.
以上の結果は次のとおりです.
the first str==jscese
the next str==test
the next str==strtok

strtok関数はスレッドが安全ではない関数です!文字列の分割を処理するときに、移動位置を保存するポインタ変数が静的変数であるためです.
これにより,同一文字列の処理において複数のstrtokが同時に操作されると,ポインタが錯乱し,想定した分割結果が得られない.
対応するスレッドセキュリティstrtok_r関数.
二:split
java:stringObj.split([separator,[limit]]);
stringObjとは、分割する文字列エンティティを指す.
separator分割フラグ
limitは、返される要素の数を表し、オプションのパラメータです.
文字列の配列を返します.
簡単な例:
public void split() {
	String testString = "jscese.test.split";

	String[] splitarray1 = testString.split("\\.");

	for (int i = 0; i < splitarray1.length; i++) {
		System.out.println(splitarray1[i]);
	}
	String[] splitarray2 = testString.split("\\.", 2);

	for (int i = 0; i < splitarray2.length; i++) {
		System.out.println(splitarray2[i]);
	}
}

以上「.」分割記号ですが、特殊文字にはエスケープが必要です.前に「\」を付ける必要があります.
JAvaイメージ+*|.などはすべて転義を加える必要があります.
以上の実行結果:
jscese
test
split
jscese
test.splilt
書くのは容易ではありません.転載するには出典を明記してください.http://blog.csdn.net/jscese/article/details/26447589