NSString中子字符串后的子串

时间:2013-04-06 11:57:55

标签: iphone ios objective-c nsstring substring

我是新的目标,我正面临着我的第一个问题,我无法继续我的第一个项目。

这很简单,我有一个NSString:

NSString *myString = @"<font face='Helvetica' size=25 color='#d79198'> Here is some text !</font>"; 

我想要做的是获得大小为“25”的值,总是2个字符长,所以我可以计算我的UILabel大小。

我知道如何使用以下方法检测是否存在我正在寻找“size =”的子字符串:

if ([string rangeOfString:@"bla"].location == NSNotFound)

但是我没有找到或者不了解如何提取字符串@“size = XX”然后从* myString

获取XX作为NSString

感谢您的帮助。

7 个答案:

答案 0 :(得分:2)

NSString *myString = @"<font face='Helvetica' size=25 color='#d79198'> Here is some text !</font>";
    if ([myString rangeOfString:@"size"].location != NSNotFound)
    {
        myString = [myString substringFromIndex:[myString rangeOfString:@"size"].location]; 
        myString = [myString substringToIndex:[myString rangeOfString:@" "].location]; // Now , myString ---> size=25 color='#d79198'> Here is some text !</font> 
        myString = [myString substringFromIndex:[myString length]-2];// Now, myString ---> size=25
        NSLog(@"myString -- %@",myString); // Now, myString ---> 25
    }

答案 1 :(得分:2)

NSString *myString = @"<font face='Helvetica' size=25 color='#d79198'> Here is some text !</font>";
NSRange range = [myString rangeOfString:@"size="];
if (range.location != NSNotFound)
{
    NSLog(@"Found \"size=\" at %d", range.location);
    NSString *sizeString = [myString substringWithRange:NSMakeRange(range.location+5, 2)];
    NSLog(@"sizeString: %@", sizeString);
}

这应该可以解决问题。最后你也可以这样做:int sizeFont = [sizeString intValue];

答案 2 :(得分:0)

HTML网页的一部分?然后是use the tool that is designed for the task

答案 3 :(得分:0)

您可以自己计算数字的范围,或者使用非常简单的正则表达式来获取子字符串,例如

(?<=size\=)\d*

这意味着您要搜索前面带有“size =”(\d*

的数字((?<=size\=)

使用NSRegularExpression将是

NSError *error = NULL;
NSRegularExpression *regex = 
  [NSRegularExpression regularExpressionWithPattern:@"(?<=size\\=)\\d*" 
                                            options:0 
                                              error:&error];
NSTextCheckingResult *match = 
  [regex firstMatchInString:myString 
                    options:0 
                      range:NSMakeRange(0, [myString length])];
NSString *sizeText = [myString substringWithRange:match.range];

最后,您应该使用

将文本"25"转换为数字
NSInteger size = [sizeText integerValue];

答案 4 :(得分:0)

如果您有像stack这样的字符串:overflow,请按以下方式使用它:

 NSString *Base=@"stack:overflow"
 NSString *one  = [[Base componentsSeparatedByString:@":"] objectAtIndex:0];
 NSString *two  = [[Base componentsSeparatedByString:@":"] objectAtIndex:1];

在这种情况下,一个=堆栈,两个=溢出

答案 5 :(得分:-1)

使用componentsSeparatedByString:方法......

NSString *myString = @"<font face='Helvetica' size=25 color='#d79198'> Here is some text !</font>";
    NSString *theSizeString = [[[[myString componentsSeparatedByString:@" "] objectAtIndex:2] componentsSeparatedByString:@"="] objectAtIndex:1];
    NSLog(@"The sizestring:%@",theSizeString);

我认为这会对你有所帮助。

答案 6 :(得分:-1)

您可以获取字符串@"size="的范围。范围有位置和长度。接下来您需要调用myString substringWithRange:方法。从NSRage的位置+长度和长度2开始,参数为@"size="