• 字符串的切割操作(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);
    	}
    
    }

    以上看出第一次之后 切割之后,假设还要继续传的參数就是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
































  • 相关阅读:
    ARP 协议
    3GPP 5G UPF
    OpenStack v.s. Kubernetes
    C#- FTP递归下载文件
    C#- WinForm获取 当前执行程序路径的几种方法
    C#- 布署WinForm程序
    Delphi- 连接MySQL数据库BDE
    Delphi- 内置数据库的使用例子BDE
    CSS- 兼容样式记录
    Delphi- DLL操作
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6866121.html
Copyright © 2020-2023  润新知