一、
split()方法用于将一个字符串分割成字符串数组。
语法:
- 1
- 2
参数介绍:separator:必需。字符串或正则表达式,从该参数指定的地方分割stringObject。
howmany
可选,该参数指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多余这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
返回值:一个字符串数组,该数组是通过在separator指定的边界处将字符串stringObject分割成子串创建的。返回的数组中的子串不包括separator自身。
但是如果separator是包含子表达式的正则表达式,那么返回的数组中包括与这些子类表达式匹配的子串(不包括与整个正则表达式匹配的文本)。
注意:如果把空字符(“”)用来separator,那么stringObject中的每个字符之间都会被分割。
例如:
- 1
- 2
- 3
- 4
结果:
h
e
l
l
o
例1:指定字符分割
- 1
- 2
- 3
- 4
输出结果为:123, 456
例2、使用下面的方法可以把句子分割成单词
var word=sentence.split(’ ‘);
或者 使用正则表达式作为separator:
var words=sentence.split(/\s+/);
对于某些特殊字符,如果字符串正好是正则的一部分,那么就需要转义才能使用。
这些字符有*|,+,,^,$, / , |, [, ], (, ), -, ., **等
因为他们是正则表达式中的一部分,所以如果想要用该字符本身,这些字符需要进行转移才能表示它本身,
例3、
想要用|竖线去分割某字符,因为|本身是正则表达式中的一部分,所以需要\去转义,而\正好也是正则表达式中的字符,所以还需要一个\,既需要使用两个。\才可以。
- 1
- 2
- 3
输出结果为:123, abc
例4、如果希望把字符串只返回一部分字符,就使用howmany参数:
“hello”.split(“”,3)
结果就返回“h”,”e”,”l”
二、在c++中strtok()用来将字符分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数的delimiters的分割字符时会将该字符改为‘\0’字符,在第一次调用时,strtok()必须给予参数str字符串,往后的调用则将参数str设置成NULL.
函数原型:
- 1
- 2
例1、
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
输出:
a
b
c
d*e
一. _tcstok 函数
在 MFC 中,一个 CString str=“ab ac dd PM” ,怎么把他分开成 ab 和 ac 和 dd 和 PM 这四个字符串,类似 string 的 split的功能?
_tcstok 声明头文件 : <TCHAR.H>
char * _tcstok ( char * strToken , const char * strDelimit );
该函数是可以从一个 CString 串中,根据提供的分隔符,截取并返回一个一个的 Token ;
参数 :
strToken: 是一个要分析的串;这个串中包含一个或者多个 Token ,当然还有分隔符,也有可
能有其他的字符;
strDelimit: 是分隔符;根据分隔符把 strToken 中的 Token 分析出来;
//==============test1:_tcstok===============
// 将以空格符为分隔符对str 进行分割
CString str = _T ("192.168.89.125" );
TCHAR seps [] = _T ("." );
TCHAR * token = _tcstok ( (LPTSTR )(LPCTSTR )str , seps );
while ( token != NULL )
{
printf ("str=%s token=%s/n" ,str ,token );
token = _tcstok ( NULL , seps );
}
//==============test1:end==================
执行结果如下:
str=192 token=192
str=192 token=168
str=192 token=89
str=192 token=125
第一次调用的时候,函数会忽略出现在 strToken 串开始的分隔符,返回找到的 Token 指针,用空字符( NULL character )替换掉已经查找到的部分(包括分隔符)并把 “ 新 ” 串保存到一个 Static 变量中(系统来完成);
如果下次调用时第一个参数为 NULL 的话,函数从 Static 变量中取出串,根据分隔符得到并返回新 Token ,用空字符( NULL character )替换掉已经查找到的部分(包括分隔符)并重新保存 “ 新 ” 串;如此循环,直到循环条件结束。
参考 : http://biao3730.spaces.live.com/Blog/cns!3415F543A07A7AE5!175.entry
也 可以使用 char * __cdecl strtok (char *, const char *);( 包含在头文件<string.h> 中)
参考: http://baike.baidu.com/view/1028553.htm
二. AfxExtractSubString 函数
此外,用 AfxExtractSubString 函数可解析复合串。包含在头文件 < AFXWIN.H > 中。
BOOL AfxExtractSubString (CString & rString , LPCTSTR lpszFullString , int iSubString , TCHAR chSep /* = */ )
参数 :
rString :用来存放你取出的子串
lpszFullString :要拆分的整个字符串
iSubString :你要取的子字符串位置,从 0 开始
chSep :特定分割符
//========test2:AfxExtractSubString========
CString str = _T ("192.168.89.125" );
CString output = "" ;
for (int i =0; i <4; i ++)
{
AfxExtractSubString (output , str , i , '.' );
printf ("%s/n" ,output );
}
//==============test2:end==================
执行结果如下:
192
168
89
125
参考 : http://www.vckbase.com/bbs/prime/viewprime.asp?id=353
三.自定义函数字符串分割函数
void Split (CString source , CString divKey, CStringArray & dest )
{
dest .RemoveAll ();
int pos = 0;
int pre_pos = 0;
while ( -1 != pos ){
pre_pos = pos ;
pos = source .Find (division ,(pos +1));
dest .Add (source .Mid (pre_pos ,(pos -pre_pos )));
}
}
参数:
Source :待分割的源串
divKey: 分割符
dest: 分割结果字符串数组