Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将前面带有哈希标记的NSString中的单词分隔开_Iphone_Ios_Objective C_Xcode_Nsstring - Fatal编程技术网

Iphone 将前面带有哈希标记的NSString中的单词分隔开

Iphone 将前面带有哈希标记的NSString中的单词分隔开,iphone,ios,objective-c,xcode,nsstring,Iphone,Ios,Objective C,Xcode,Nsstring,我有一个NSString,例如: "Had a #great time at the #party last night." 我想将其拆分为一个数组,如下所示: "Had a " "#great" " time at the " "#party" " last night." 我该怎么做呢?试试这个: for (int i=0;i<[YourArray count];i++) { NSString * mystr=[YourArray objectAtInde

我有一个NSString,例如:

"Had a #great time at the #party last night."
我想将其拆分为一个数组,如下所示:

"Had a "
"#great"
" time at the "
"#party"
" last night."
我该怎么做呢?

试试这个:

    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.....
        }
    }
for(inti=0;i请尝试此代码

for (int i=0;i<[YourArray count];i++) {
        NSString *  str=[YourArray objectAtIndex:i];
            NSString *myString=[str substringToIndex:1];
NSString *stringfinal = [myString 
   stringByReplacingOccurrencesOfString:@"#" withString:@""];

    }

for(inti=0;i像这样尝试它会帮助你

 NSString *str=@"how are #you #friend";
    NSArray *arr=[str componentsSeparatedByString:@" "];
    NSPredicate *p = [NSPredicate predicateWithFormat:@"not SELF contains '#'"];
    NSArray *b = [arr filteredArrayUsingPredicate:p];
    NSLog(@"%@",b);
上述谓词将返回不包含“#”符号的单词

它将返回不以字母“#”开头的单词

O/p:-

(
    how,
    are
)

EDIT:-

NSString *str=@"how are #you #friend";
    NSArray *arr=[str componentsSeparatedByString:@"#"];
    NSMutableArray *result=[[NSMutableArray alloc]initWithObjects:[arr objectAtIndex:0], nil];
    for(int i=1;i<[arr count];i++){
        [result addObject:[NSString stringWithFormat:@"#%@",[arr objectAtIndex:i]]];
    }
    NSLog(@"%@",result);
试一试

编辑:

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

尝试使用正则表达式。使用此代码,您将能够提取哈希标记:

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

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"((?:#){1}[\\w\\d]{1,140})" options:0 error:&error];
NSArray * matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
for ( NSTextCheckingResult* match in matches )
{
    NSString * hashtag = [string substringWithRange:[match range]];
    NSLog(@"match: %@", hashtag);
}
有了这个,你就可以建立你想要的数组结果。

NSString*str=@“昨晚在派对上玩得很开心。”;
NSString *str = @"Had a #great time at the #party last night.";

NSMutableArray *arr = [[NSMutableArray alloc] init];
NSArray *array = [str componentsSeparatedByString:@"#"];
 NSMutableString *retStr= [[NSMutableString alloc] initWithString:[array objectAtIndex:0]];
[arr addObject:retStr];
for(int i=1 ; i<[array count];i++)
{
    NSArray *array1 = [[array objectAtIndex:i] componentsSeparatedByString:@" "];
    {
        NSMutableString *retStr= [[NSMutableString alloc]init];
        for (int i = 0;i< [array1 count]; i++)
        {
            if(i==0)
            {
                [retStr appendFormat:@" #%@ ",[array1 objectAtIndex:i]];
                [arr addObject:retStr];
                retStr= [[NSMutableString alloc]init];
            }
            else
            {
                [retStr appendFormat:@"%@ ",[array1 objectAtIndex:i]];
            }
        }
        [arr addObject:retStr];
    }
}
NSLog(@"%@",arr); 
NSMutableArray*arr=[[NSMutableArray alloc]init]; NSArray*数组=[str组件由字符串分隔:@“#”]; NSMutableString*retStr=[[NSMutableString alloc]initWithString:[array objectAtIndex:0]]; [arr addObject:retStr];
对于(int i=1;i如果您想在字符串上的一次传递中有效地执行此操作,您可以尝试以下操作(临时代码-测试bug/边界情况等):


尝试使用此regexp:
(#.+?\\b)|(.+?(?=#.$)

它查找以hashtag开头的单词和以hashtag结尾的子序列

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.
单通解


结果:

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

如果要保留前导空格,请将其稍微更改为

NSString *string = @"Had a #great time at the #party last night.";
NSMutableArray *array = [@[] mutableCopy];
NSScanner *scanner = [NSScanner scannerWithString:string];

BOOL firstSegment = YES;
while (![scanner isAtEnd]) {
    NSString *s;
    [scanner scanUpToString:@"#" intoString:&s];
    if(s) [array addObject: (!firstSegment) ? [@" " stringByAppendingString:s] : s];
    s = nil;

    [scanner scanUpToString:@" " intoString:&s];
    if(s) [array addObject:s];
    firstSegment = NO;
}

结果:

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

你想做什么?删除前面有散列的单词(根据主题行的建议)或将其拆分成数组(如问题主体所示)?这里更广泛的目标是什么?NSArray*newArray=[[NSArray alloc]init];newArray=[myString components separatedbystring:@“#”];输出:(“玩得很开心”,“玩得很开心”,“昨晚的派对。”)@Pradeep但这并不能告诉我哪些字符串中有标签。它被称为octothorpe。但这并不能告诉我每个字符串,并告诉我每个条目出现的位置。@Andrew:一旦检查我编辑的答案,你可能会想这样。这很好,但在我的示例中,它会返回“Haved a”、“great time at the”、”#昨晚的聚会。
NSString *string = @"Had a #great time at the #party last night.";
NSMutableArray *array = [@[] mutableCopy];
NSScanner *scanner = [NSScanner scannerWithString:string];
while (![scanner isAtEnd]) {
    NSString *s;

    [scanner scanUpToString:@"#" intoString:&s];
    if(s) [array addObject:s];
    s = nil;

    [scanner scanUpToString:@" " intoString:&s];
    if(s) [array addObject:s];        
}
(
    "Had a ",
    "#great",
    "time at the ",
    "#party",
    "last night."
)
NSString *string = @"Had a #great time at the #party last night.";
NSMutableArray *array = [@[] mutableCopy];
NSScanner *scanner = [NSScanner scannerWithString:string];

BOOL firstSegment = YES;
while (![scanner isAtEnd]) {
    NSString *s;
    [scanner scanUpToString:@"#" intoString:&s];
    if(s) [array addObject: (!firstSegment) ? [@" " stringByAppendingString:s] : s];
    s = nil;

    [scanner scanUpToString:@" " intoString:&s];
    if(s) [array addObject:s];
    firstSegment = NO;
}
(
    "Had a ",
    "#great",
    " time at the ",
    "#party",
    " last night."
)