2013-04-06 71 views
2

我是新客觀的,我面臨第一個問題,我無法繼續我的第一個項目。NSString子串後的子串

這是很簡單的,我有一個的NSString:

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

我想要做的是讓大小「25」這始終是2字符長的值,所以我可以計算我的UILabel大小。

我知道如何檢測是否有我要找的串「大小=」使用:

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

,但我還沒有找到或者不知道如何提取字符串@「大小= XX」然後從* myString獲取XX作爲NSString

感謝您的任何幫助。

+0

一般來說,你可以使用「正則表達式」,或者你可以使用componentsSeparatedByString。對於後者,您可能需要使用hasPrefix檢查每個生成的「組件」以查找以「size =」開頭的那個。 – 2013-04-06 12:20:39

回答

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];

+0

非常感謝您的提示大衛! – user2252092 2013-04-06 15:16:03

+0

請注意,如果未找到目標字符串,rangeOfString將返回長度== 0。所以檢查長度比位置更好。如果接收者爲零,則長度和位置都返回爲0,而不是NSNotFound。 – Reefwing 2017-12-12 06:35:55

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 
    } 
+0

就像你試圖[使用正則表達式解析HTML]一樣(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) 。你**不應該** – 2013-04-06 12:07:04

+0

@ H2CO3嗯......正則表達式...... *看起來內疚* – 2013-04-06 12:13:08

+0

完美,非常感謝你! – user2252092 2013-04-06 15:15:44

0

HTML頁面的一部分?然後use the tool that is designed for the task

+3

這個答案有什麼問題?這是迄今爲止唯一正確的答案**。 – 2013-04-06 12:21:10

+0

這也是我的意見... – HAS 2013-04-06 12:36:10

+0

非我使用這個,因爲有色UILabel – user2252092 2013-04-06 15:16:56

0

你可以自己計算數量的範圍,或者使用一個非常簡單的正則表達式來獲取子,像

(?<=size\=)\d* 

這意味着,你正在尋找的是前面有個數字(\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]; 

最後,你應該CONVER t爲文本"25"到使用

NSInteger size = [sizeText integerValue]; 
+0

我第一次使用NSRegularExpression,感謝提示大衛。 – user2252092 2013-04-06 15:17:59

-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); 

我認爲這將是對你有所幫助。

+0

也在工作,非常感謝你 – user2252092 2013-04-06 15:16:20

-1

您可以得到字符串@"size="的範圍。範圍有位置和長度。所以你下一步需要調用myStringsubstringWithRange:方法。該參數將是一個NSRage從2.

0

位置+的@"size="長度和長度開始如果有字符串等堆棧:溢出然後用它如下:

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

在這種情況下一個堆棧=和兩個=溢出