Iphone 将前面带有哈希标记的NSString中的单词分隔开
我有一个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
"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."
)