您的位置:首页 > 其它

将英文句子拆成一个个单词(对于句子中可能出现的不同情况)

2015-02-09 18:02 746 查看
最近有个需求,后台给我一个英文句子,我要把其中每个单词拆出来,然后计算出单词的个数,把每个单词布局到一个个横线上。 有的人会想,很好搞啊,直接以空格去拆分就得了,然后再判断每个单词的最后一个字符是不是逗号等符号,是的话去掉。

这样做的话,那得要求后台的英文句子高度标准,假如句子里有连续的两个空格怎么办,这个时候拆分出来的单词就会出现空格,单词数就会不准确。这个还好说,有解决方法:如果判断出单词是空格的话,去掉就好。可是另外一种情况,比如句子是 “Yeah,I need a word”。Yeah 和 I 之间只有逗号,没有空格,这个时候如果再去做判断就显得很麻烦。。更何况后台给出的问题情况多种多样,你懂的。。根本无法单纯的用以空格进行拆分的方法去解决这个问题。所以怎么解决呢? 对,逐个字符遍历的方法。 现列出两种方法,两种方法的思路是一样的。。

假如句子就是:

NSString *sentence =@"Yeah,...I need a world.";
方法一:

- (NSMutableArray *)componentsWithString:(NSString *)str
{
NSMutableArray *wordArray = [NSMutableArrayarray];

NSString *wordStr = @"";

for (int y =
0;y < str.length; y++) {
//利用截取字符串的方法截取出每个字符
NSString *string1 = [str
substringFromIndex:y];
NSString *string2 = [string1
substringToIndex:1];
//转化为字符的形式,此处编码方式可以是NSUTF8StringEncoding
constchar *s = [string2
cStringUsingEncoding:NSASCIIStringEncoding];
//判断是不是字母
//针对于上引号’这种情况:s[0]=='\''
//针对于有短横线 - 这种情况:s[0]=='-'
if ((s[0] >=65 && s[0]<=90) || (s[0]>=97 && s[0]<=122)
|| s[0]=='\'' || s[0]=='-') {
NSString *string = [NSStringstringWithCString:s
encoding:NSUTF8StringEncoding];
wordStr = [wordStr stringByAppendingString:string];
}else {
if (wordStr.length >0) {
[wordArray addObject:wordStr];
}
wordStr = @"";
}
}
return wordArray;
}

方法二:

- (NSMutableArray *)componentsWithString1:(NSString *)str
{
NSMutableArray *wordArray = [NSMutableArrayarray];

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;
}

从以上可以看出,方法二较为简便,推荐用方法二。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐