Objective c 目标C:如何提取字符串的一部分(例如,从';';)开始)
我有一个字符串,如下所示Objective c 目标C:如何提取字符串的一部分(例如,从';';)开始),objective-c,ios,hash,nsstring,substring,Objective C,Ios,Hash,Nsstring,Substring,我有一个字符串,如下所示 NSString * aString = @"This is the #substring1 and #subString2 I want"; 如何仅选择以“#”开头(并以空格结尾)的文本,在本例中为“subString1”和“subString2” 注:为清晰起见,对问题进行了编辑 [aString substringWithRange:NSMakeRange(13, 10)] 我会给你一个子串 可以使用以下公式计算范围: NSRange startRange
NSString * aString = @"This is the #substring1 and #subString2 I want";
如何仅选择以“#”开头(并以空格结尾)的文本,在本例中为“subString1”和“subString2”
注:为清晰起见,对问题进行了编辑
[aString substringWithRange:NSMakeRange(13, 10)]
我会给你一个子串
可以使用以下公式计算范围:
NSRange startRange = [aString rangeOfString:@"#"];
NSRange endRange = [original rangeOfString:@"1"];
NSRange searchRange = NSMakeRange(startRange.location , endRange.location);
[aString substringWithRange:searchRange]
我会给你一个子串
阅读更多:
及
假设您正在查找以磅开头、以空格结尾的第一个字符串,这可能会起作用。我面前没有XCode,所以如果在某个地方出现语法错误或长度偏离1,请原谅:
-(NSString *)StartsWithPound:(NSString *)str {
NSRange range = [str rangeOfString:@"#"];
if(range.length) {
NSRange rangeend = [str rangeOfString:@" " options:NSLiteralSearch range:NSMakeRange(range.location,[str length] - range.location - 1)];
if(rangeend.length) {
return [str substringWithRange:NSMakeRange(range.location,rangeend.location - range.location)];
}
else
{
return [str substringFromIndex:range.location];
}
}
else {
return @"";
}
}
可以使用将字符串拆分的方法来执行此操作。这段代码将循环一个字符串并用子字符串填充数组
NSString * aString = @"This is the #substring1 and #subString2 I want";
NSMutableArray *substrings = [NSMutableArray new];
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanUpToString:@"#" intoString:nil]; // Scan all characters before #
while(![scanner isAtEnd]) {
NSString *substring = nil;
[scanner scanString:@"#" intoString:nil]; // Scan the # character
if([scanner scanUpToString:@" " intoString:&substring]) {
// If the space immediately followed the #, this will be skipped
[substrings addObject:substring];
}
[scanner scanUpToString:@"#" intoString:nil]; // Scan all characters before next #
}
// do something with substrings
[substrings release];
下面是代码的工作原理:
子字符串中。如果#是最后一个字符,或者紧跟空格,则该方法将返回NO。否则,它将返回YES
子字符串
添加到子字符串
数组中非常简单、易于理解的版本避免
NSRange
stuff:
NSArray * words = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSMutableArray * mutableWords = [NSMutableArray new];
for (NSString * word in words){
if ([word length] > 1 && [word characterAtIndex:0] == '#'){
NSString * editedWord = [word substringFromIndex:1];
[mutableWords addObject:editedWord];
}
}
另一个简单的解决方案:
NSRange hashtag = [aString rangeOfString:@"#"];
NSRange word = [[aString substringFromIndex:hashtag.location] rangeOfString:@" "];
NSString *hashtagWord = [aString substringWithRange:NSMakeRange(hashtag.location, word.location)];
选择NSString中以“#”开头的所有单词的通用且简单的代码是:
NSString * aString = @"This is the #substring1 and #subString2 ...";
NSMutableArray *selection=@[].mutableCopy;
while ([aString rangeOfString:@"#"].location != NSNotFound)
{
aString = [aString substringFromIndex:[aString rangeOfString:@"#"].location +1];
NSString *item=([aString rangeOfString:@" "].location != NSNotFound)?[aString substringToIndex:[aString rangeOfString:@" "].location]:aString;
[selection addObject:item];
}
如果您仍然需要原始字符串,可以进行复制。
如果您选择的项目是最后一个单词,则使用内联条件。这就是我要做的:
NSString *givenStringWithWhatYouNeed = @"What you want to look through";
NSArray *listOfWords = [givenStringWithWhatYouNeed componentsSeparatedByString:@" "];
for (NSString *word in listOfWords) {
if ([[word substringWithRange:NSMakeRange(0, 1)]isEqualToString:@"#"]) {
NSString *whatYouWant = [[word componentsSeparatedByString:@"#"]lastObject];
}
}
然后,您可以使用whatYouWant
实例执行所需操作。如果您想知道它是哪个字符串(如果是子字符串1或2),请检查listOfWords
数组中word
字符串的索引
我希望这能有所帮助。你怎么知道子字符串的结尾呢?根据问题,我认为他指的是空格之前的所有内容。非常感谢!今晚救了我!非常感谢。这是最好的答案,因为它是最简单和有效的!给我一个比较的警告。必须进行字符串比较=@“#”,然后必须使用[word characterAtIndex:0]==[compare characterAtIndex:0]。是的,非常简单+1子字符串1只是一个例子。寻找“1”的硬编码很糟糕。如果您不知道#后面的字符串是什么,那么这不是正确的解决方案。此外,这并不能回答查找#之后出现的所有字符串的OP问题。子字符串2呢?