字符串的分割操作(strtok,split)

来源:互联网 发布:php网站环境搭建centos 编辑:程序博客网 时间:2024/04/28 12:24


一: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==jscesethe next str==testthe 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
































1 0
原创粉丝点击