0

たとえば、NSStringがあります。

"Had a #great time at the #party last night."

これを配列に分割したいので、次のようにします。

"Had a "
"#great"
" time at the "
"#party"
" last night."

どうすればこれを行うことができますか?

4

9 に答える 9

1

文字列の1回のパスで効率的に実行したい場合は、次のようなことを試すことができます(スクラッチコード-バグ/境界ケースのテストなど...):

int main (int argc, const char * argv[])
{
    NSString *msg = @"Had a #great time at the #party last night.";

    Boolean inTag = NO;
    NSMutableArray *segments = [[NSMutableArray alloc] init];
    NSUInteger idx = 0;
    NSUInteger i=0;
    for (; i < [msg length]; i++)
    {
        unichar ch = [msg characterAtIndex:i];

        if (inTag && ch == ' ')
        {
            [segments addObject:[msg substringWithRange:NSMakeRange(idx, i - idx)]];
            idx = i;
            inTag = NO;
        }

        if (ch == '#')
        {
            [segments addObject:[msg substringWithRange:NSMakeRange(idx, i - idx)]];
            idx = i;
            inTag = YES;
        }
    }

    if (i > idx)
    {
        [segments addObject:[msg substringWithRange:NSMakeRange(idx, i - idx - 1)]];
    }

    for(NSString *seg in segments)
    {
        NSLog(@"%@", seg);
    }
}

これは以下を出力します:

2013-04-29 08:34:34.984 Craplet[95591:707] Had a 
2013-04-29 08:34:34.986 Craplet[95591:707] #great
2013-04-29 08:34:34.986 Craplet[95591:707]  time at the 
2013-04-29 08:34:34.987 Craplet[95591:707] #party
2013-04-29 08:34:34.987 Craplet[95591:707]  last night
于 2013-04-29T12:37:32.423 に答える
1

この正規表現を使用してみてください:(#.+?\\b)|(.+?(?=#|$))

ハッシュタグで始まる単語とハッシュタグで終わるサブシーケンスを検索します

NSString * string = @"Had a #great time at the #party last night.";
NSError * error = nil;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"((#.+?\\b)|(.+?(?=#|$)))"
                                                                       options:0
                                                                         error:&error];
NSArray * matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
for (NSTextCheckingResult* match in matches ) {
    NSLog(@"%@", [string substringWithRange:[match range]]);
}

出力:

2013-04-29 16:57:51.688 Had a 
2013-04-29 16:57:51.689 #great
2013-04-29 16:57:51.690  time at the 
2013-04-29 16:57:51.691 #party
2013-04-29 16:57:51.692  last night.
于 2013-04-29T12:58:57.500 に答える
0

これを試して:

    for (int i=0;i<[YourArray count];i++) {
        NSString *  mystr=[YourArray objectAtIndex:i];
            NSString *temp=[mystr substringToIndex:1];
        if (![temp isEqualToString:@"#"]) {
           //add your string in new array and use this arry.....
        }
    }
于 2013-04-29T12:02:58.847 に答える
0

試す

NSString *string = @"Had a #great time at the #party last night.";
NSArray *components = [string componentsSeparatedByString:@" "];

NSMutableArray *formattedArray = [NSMutableArray array];
NSMutableString *mutableString = [NSMutableString string];
for (NSString *string in components)
{
    if (![string hasPrefix:@"#"]){
        if (!mutableString){
            mutableString = [NSMutableString string];
        }
        [mutableString appendFormat:@" %@",string];
    }else{
        if (mutableString) {
            [formattedArray addObject:mutableString];
            mutableString = nil;
        }
        [formattedArray addObject:string];
    }
}

if (mutableString) {
    [formattedArray addObject:mutableString];
}

NSLog(@"%@",formattedArray);

編集 :

(
    " Had a",
    "#great",
    " time at the",
    "#party",
    " last night."
)
于 2013-04-29T12:22:37.173 に答える