码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-09 18:21:28      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:string转化为字符   将句子拆分成单词   

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

这样做的话,那得要求后台的英文句子高度标准,假如句子里有连续的两个空格怎么办,这个时候拆分出来的单词就会出现空格,单词数就会不准确。这个还好说,有解决方法:如果判断出单词是空格的话,去掉就好。可是另外一种情况,比如句子是 “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;

}


从以上可以看出,方法二较为简便,推荐用方法二。


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

标签:string转化为字符   将句子拆分成单词   

原文地址:http://blog.csdn.net/oik_ios/article/details/43672837

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!