如果我想从NSString中获取一个值@"value:hello World:value"
,应该怎么用?
我想要的返回值为@"hello World"
。
如果我想从NSString中获取一个值@"value:hello World:value"
,应该怎么用?
我想要的返回值为@"hello World"
。
"hello World"
吗? return @"hello World"
。您是否只想返回冒号之间的内容?您是否要剥离最左边的结肠左侧的所有内容和最右边的结肠右侧的所有内容?这个问题没有明确定义的输入-输出标准(正如我们看到的结果列表一样,这些问题都可以通过各种方法解决该问题)。
Answers:
选项1:
NSString *haystack = @"value:hello World:value";
NSString *haystackPrefix = @"value:";
NSString *haystackSuffix = @":value";
NSRange needleRange = NSMakeRange(haystackPrefix.length,
haystack.length - haystackPrefix.length - haystackSuffix.length);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle); // -> "hello World"
选项2:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^value:(.+?):value$" options:0 error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:haystack options:NSAnchoredSearch range:NSMakeRange(0, haystack.length)];
NSRange needleRange = [match rangeAtIndex: 1];
NSString *needle = [haystack substringWithRange:needleRange];
不过,对于您这个微不足道的案例来说,这可能有点过高。
选项3:
NSString *needle = [haystack componentsSeparatedByString:@":"][1];
这将在拆分时创建三个临时字符串和一个数组。
所有代码段均假定搜索的内容实际上包含在字符串中。
这是一个不太复杂的答案:
NSString *myString = @"abcdefg";
NSString *mySmallerString = [myString substringToIndex:4];
另请参见substringWithRange和substringFromIndex
这是一个简单的功能,可让您执行所需的操作:
- (NSString *)getSubstring:(NSString *)value betweenString:(NSString *)separator
{
NSRange firstInstance = [value rangeOfString:separator];
NSRange secondInstance = [[value substringFromIndex:firstInstance.location + firstInstance.length] rangeOfString:separator];
NSRange finalRange = NSMakeRange(firstInstance.location + separator.length, secondInstance.location);
return [value substringWithRange:finalRange];
}
用法:
NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];
getSubstring:…
应该substringInString:…
在不向其传递子字符串的情况下调用,get…
并且通常应将以开头的方法传递给要写入的缓冲区指针。substringFromIndex:
创建一个中间子字符串,这是不必要的rangeOfString:options:range:
。最后,通过将一个不安全的代码段包装在一个一般的方法中,您可以掩盖一个错误:如果分隔符在字符串中存在一次或更少次,您将获得超出范围的异常。
也使用这个
NSString *ChkStr = [MyString substringWithRange:NSMakeRange(5, 26)];
注意-您NSMakeRange(start, end)
应该是NSMakeRange(start, end- start)
;
这是@Regexident选项1和@Garett答案的一个小组合,可以在前缀和后缀之间使用一个功能强大的字符串切割器,上面有更多...更多单词。
NSString *haystack = @"MOREvalue:hello World:valueANDMORE";
NSString *prefix = @"value:";
NSString *suffix = @":value";
NSRange prefixRange = [haystack rangeOfString:prefix];
NSRange suffixRange = [[haystack substringFromIndex:prefixRange.location+prefixRange.length] rangeOfString:suffix];
NSRange needleRange = NSMakeRange(prefixRange.location+prefix.length, suffixRange.location);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle);
<i></i>
在项目中的标签内获取字符串以使这些字符串变为斜体。:)