たとえば、NSStringがあります。
"Had a #great time at the #party last night."
これを配列に分割したいので、次のようにします。
"Had a "
"#great"
" time at the "
"#party"
" last night."
どうすればこれを行うことができますか?
たとえば、NSStringがあります。
"Had a #great time at the #party last night."
これを配列に分割したいので、次のようにします。
"Had a "
"#great"
" time at the "
"#party"
" last night."
どうすればこれを行うことができますか?
文字列の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
この正規表現を使用してみてください:(#.+?\\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.
これを試して:
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.....
}
}
試す
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."
)