字符串的切割操作(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 \n", pstr);
	while ((pstr = strtok(NULL, delim)) != NULL)
	{
		printf("the next str==%s \n", pstr);
	}

}

以上看出第一次之后 切割之后,假设还要继续传的參数就是NULL。由于strtok是把切割的标志位置设置成了/0

切割完之后的字符串: jscese/0test/0strtok 

所以往后的开头指针的位置都是/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
































posted @ 2017-05-17 10:10  gccbuaa  阅读(1773)  评论(0编辑  收藏  举报