今天我们为下一节的CSV文件处理做一个准备,开始自定义一个对字符串按照特定的符号分割的类,实现如下:
class StringUtil : public CCObject {
public:
static StringUtil* sharedStrUtil();
bool init();
/** 用分隔符分割字符串,结果存放到一个列表中,列表中的对象为CCString */
CCArray* split(const char* srcStr, const char* sSep);
private:
static StringUtil* mStringUtil;
};
#endif
#include "StringUtil.h"
StringUtil* StringUtil::mStringUtil = NULL;
StringUtil* StringUtil::sharedStrUtil(){
if(mStringUtil == NULL) {
mStringUtil = new StringUtil();
if(mStringUtil && mStringUtil->init()) {
mStringUtil->autorelease();
}
else {
CC_SAFE_DELETE(mStringUtil);
mStringUtil = NULL;
}
}
return mStringUtil;
}
bool StringUtil::init(){
return true;
}
CCArray* StringUtil::split( const char* srcStr, const char* sSep ){
CCArray* stringList = CCArray::create();
int size = strlen(srcStr);
/* 将数据转换为Cocos2d-x字符串对象 */
CCString* str = CCString::create(srcStr);
int startIndex = 0;
int endIndex = 0;
endIndex = str->m_sString.find(sSep);
CCString* spliStr = NULL;
/* 根据分隔符拆分字符串,并添加到列表中 */
while(endIndex > 0) {
spliStr = CCString::create("");
/* 截取字符串 */
spliStr->m_sString = str->m_sString.substr(startIndex, endIndex);
/* 添加字符串到列表 */
stringList->addObject(spliStr);
/* 截取剩下的字符串 */
str->m_sString = str->m_sString.substr(endIndex + 1, size);
/* 查找下一个分隔符所在下标 */
endIndex = str->m_sString.find(sSep);
}
/* 剩下的字符串也添加进列表 */
if(str->m_sString.compare("") != 0) {
stringList->addObject(CCString::create(str->m_sString));
}
return stringList;
}
在HelloWorld中添加调试:
bool HelloWorld::init()
{
bool bRet = false;
do
{
CCArray *strlist = StringUtil::sharedStrUtil()->split("Zhangxl,aihaoguangfan,basketball,swim",",");
CCObject *object = NULL;
CCARRAY_FOREACH(strlist,object)
{
CCString *str = (CCString*)object;
CCLOG(str->getCString());
}
bRet = true;
} while (0);
return bRet;
}
运行效果如下: