按特定字符划分NSString

时间:2014-02-19 23:06:31

标签: ios objective-c

我正在制作一款帮助学生学习的应用,但我遇到了麻烦。该应用程序允许您在其他事情之间做笔记,但我需要帮助使我的代码工作。我试图将一个NSString划分为一个特定的角色,例如用户在一个音符中写道:“海豚:鲸类哺乳动物是紧密的...”我需要应用识别角色:还有部分在左边的那个它需要保存以便以后使用,作为变量和右边的部分也可以作为一个不同的变量,以便我以后可以使用它们。 现在就像这样做

NSArray *card = [_argumentTextView.text componentsSeparatedByString:@":"]; 

QueRes *make = [QueRes sharedInstance];

make.question = card [0];
make.response = card [1];

但是,当我使用变量问题和变量响应时,它显示为空白或者没有任何内容。我使用这样的变量:

QueRes *make = [QueRes sharedInstance];
_questionTextView.text = make.question;

顺便说一下我用来声明变量的方法是:

在h

@interface PreRes : NSObject

{
    NSString *_response;
    NSString *_question;     
}

*+* (PreRes *)sharedInstance;

@property(strong, nonatomic, readwrite) NSString *question;   
@property(strong, nonatomic, readwrite) NSString *response;

@end

并在m

@implementation QueRes  

@synthesize response = _response;
@synthesize question = _question;

+ (QueRes *)sharedInstance 
{
    static dispatch_once_t onceToken;
    static QueRes *instance = nil;
    dispatch_once(&onceToken, ^{
        instance = [[QueRes alloc] init];
    });

    return instance;
}

- (id)init  
 {

    self = [super init];

    if (self) 
    { 
        _question = nil;
        _response = nil;
    }


    return self;
 }
@end

1 个答案:

答案 0 :(得分:2)

在Objective-C / Cocoa中拆分字符串可以在NSString上使用这两种方法完成:

- (NSArray *)componentsSeparatedByString:(NSString *)separator;
- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator;

来自componentsSeparatedByString:的文档:


数组中的子串按照接收器中的顺序显示。相邻的分隔符字符串出现在结果中产生空字符串。类似地,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。例如,此代码片段:

NSString *list = @"Norman, Stanley, Fletcher";
NSArray *listItems = [list componentsSeparatedByString:@", "];

生成一个数组{ @"Norman", @"Stanley", @"Fletcher" }.

如果列表以逗号和空格开头,例如“,Norman,Stanley,Fletcher” - 数组包含以下内容:{ @"", @"Norman", @"Stanley", @"Fletcher" }

如果list没有分隔符 - 例如,“Norman” - 数组包含字符串本身,在本例中为{ @"Norman" }


但这两种方法实际上并不适用于强大的文本处理任务。您应该查看以下API:

- (void)enumerateLinguisticTagsInRange:(NSRange)range 
                               scheme:(NSString *)tagScheme 
                              options:(NSLinguisticTaggerOptions)opts 
                          orthography:(NSOrthography *)orthography 
                           usingBlock:(void (^)(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop))block;

- (void)enumerateSubstringsInRange:(NSRange)range 
                           options:(NSStringEnumerationOptions)opts
                        usingBlock:(void (^)(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop))block;

另外,请注意,如果componentsSeparatedByString:返回的项目少于预期,盲目访问componentsSeparatedByString:返回的数组项将会因索引超出范围异常而崩溃。如果字符串在您上面发布的代码中缺少分号,则会出现这种情况。

您应该验证返回的数组是正确/预期的长度。例如:

if ([card count] >= 2)
{
    make.question = card[0];
    make.response = card[1];
}

从你的问题来看,我认为你的问题可能在于你的“单身”,而不是你的字符串分裂逻辑。