最近有个需求,后台给我一个英文句子,我要把其中每个单词拆出来,然后计算出单词的个数,把每个单词布局到一个个横线上。 有的人会想,很好搞啊,直接以空格去拆分就得了,然后再判断每个单词的最后一个字符是不是逗号等符号,是的话去掉。
这样做的话,那得要求后台的英文句子高度标准,假如句子里有连续的两个空格怎么办,这个时候拆分出来的单词就会出现空格,单词数就会不准确。这个还好说,有解决方法:如果判断出单词是空格的话,去掉就好。可是另外一种情况,比如句子是 “Yeah,I need a word”。Yeah 和 I 之间只有逗号,没有空格,这个时候如果再去做判断就显得很麻烦。。更何况后台给出的问题情况多种多样,你懂的。。根本无法单纯的用以空格进行拆分的方法去解决这个问题。所以怎么解决呢? 对,逐个字符遍历的方法。 现列出两种方法,两种方法的思路是一样的。。
假如句子就是:
NSString *sentence =
@"Yeah,...I need a world.";
方法一:
- (NSMutableArray *)componentsWithString:(NSString *)str
{
NSMutableArray *wordArray = [NSMutableArray
array];
NSString *wordStr = @"";
for (int y =
0;y < str.length; y++) {
//利用截取字符串的方法截取出每个字符
NSString *string1 = [str
substringFromIndex:y];
NSString *string2 = [string1
substringToIndex:1];
//转化为字符的形式,此处编码方式可以是NSUTF8StringEncoding
const
char *s = [string2 cStringUsingEncoding:NSASCIIStringEncoding];
//判断是不是字母
//针对于上引号’这种情况:s[0]==‘\‘‘
//针对于有短横线 - 这种情况:str[0]==‘-‘
if ((s[0] >=65 && s[0]<=90) || (s[0]>=97 && s[0]<=122)
|| s[0]==‘\‘‘ || str[0]==‘-‘) {
NSString *string = [NSString
stringWithCString:s encoding:NSUTF8StringEncoding];
wordStr = [wordStr stringByAppendingString:string];
}else {
if (wordStr.length >
0) {
[wordArray addObject:wordStr];
}
wordStr = @"";
}
}
return wordArray;
}
方法二:
- (NSMutableArray *)componentsWithString1:(NSString *)str
{
NSMutableArray *wordArray = [NSMutableArray
array];
NSString *wordStr = @"";
for (int k=0; k<strlen(str.UTF8String); k++) {
if ((str.UTF8String[k] >=
97 && str.UTF8String[k] <=
122)|| (str.UTF8String[k] >= 65 && str.UTF8String[k] <=
97 || (str.UTF8String[k]==‘\‘‘) || (str.UTF8String[k]==‘-‘ )) {
wordStr = [wordStr stringByAppendingFormat:@"%c",str.UTF8String[k]];
}else {
if (wordStr.length >
0) {
[wordArray addObject:wordStr];
wordStr = @"";
}
}
}
return wordArray;
}
从以上可以看出,方法二较为简便,推荐用方法二。