2013-02-28 37 views
0

在我的应用程序中,我想按照以下步骤获取最终化字符串。 我的邮件格式如下解析大字符串并用iOS 6+中的新值替换解析的字符串值

message <br/><br/> On {date_time_stamp} sender_name wrote <br/><br/> 

让我们给说我的消息字符串是如下

Hello developers <br/><br/> On {2013-02-28 05:00:33} Bob wrote <br/><br/> 
Hello World <br/><br/> On {2013-02-27 08:35:33} Jack wrote <br/><br/> 
Hello Apple <br/><br/> On {2013-02-26 04:10:44} Tom wrote <br/><br/> 

现在我需要遵循以下步骤

  1. 获取所有日期的消息一个由一个

  2. 将其从GMT时区转换为本地l分时区

  3. 替换GMT与当地的日期时间

  4. 消息日期最后取代“特征线与\ n” &删除消息花括号。

我有下面的代码

-(void)parseMessageBody:(NSString*)msg 
{ 
    NSRange openBracket = [msg rangeOfString:@"{"]; 
    NSRange closeBracket = [msg rangeOfString:@"}"]; 
    NSRange numberRange = NSMakeRange(openBracket.location + 1, closeBracket.location - openBracket.location - 1); 
    NSString *numberString = [msg substringWithRange:numberRange]; 
    NSLog(@"Parsed string: %@",numberString); 
} 

-(NSString*)formattedMessageFromString:(NSString*)msg 
{ 
    NSString *formattedMessage = @""; 
    formattedMessage = [msg stringByReplacingOccurrencesOfString:@"<br/>" withString:@"\n"]; 
    return formattedMessage; 
} 

-(NSString*)getLocalDateFromUTCDateString:(NSString*)utcDateString 
{ 
    NSDateFormatter *serverDateFormatter = [[NSDateFormatter alloc] init]; 
    NSTimeZone *sourceTimeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 
    [serverDateFormatter setTimeZone:sourceTimeZone]; 
    [serverDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSDate *dateFromServer = [serverDateFormatter dateFromString:utcDateString]; 
    DLog(@"UTC date From SERVER: %@",dateFromServer); 

    NSDateFormatter *localDateFormatter = [[NSDateFormatter alloc] init]; 
    [localDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSTimeZone* localTimeZone = [NSTimeZone systemTimeZone]; 
    [localDateFormatter setTimeZone:localTimeZone]; 
    NSString *localDate = [localDateFormatter stringFromDate:dateFromServer]; 
    DLog(@"Converted Local DAte : %@",localDate); 

    return localDate; 
} 

我不能够执行步骤1 & 3得到的所有日期的消息&与当地的日期及时更换。 此消息可随时间增长。所以解析需要很快。 任何人都可以告诉我如何获得消息&中的所有日期替换为转换日期?

任何形式的帮助,高度赞赏。提前致谢。

回答

2

查找和替换的日期可以用正则表达式来完成:

NSString *msg = @"Hello developers <br/><br/> On {2013-02-28 05:00:33} Bob wrote <br/><br/>\n" 
    "Hello World <br/><br/> On {2013-02-27 08:35:33} Jack wrote <br/><br/>\n" 
    "Hello Apple <br/><br/> On {2013-02-26 04:10:44} Tom wrote <br/><br/>\n"; 
NSMutableString *replacedMsg = [msg mutableCopy]; 

NSString *pattern = @"\\{(.+?)\\}"; // Pattern for { ... } 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL]; 

__block int offset = 0; 
[regex enumerateMatchesInString:msg options:0 range:NSMakeRange(0, [msg length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
    NSRange range0 = [result range]; // range including { } 
    NSRange range1 = [result rangeAtIndex:1]; // range excluding { } 
    range0.location += offset; 
    range1.location += offset; 
    NSString *oldDate = [replacedMsg substringWithRange:range1]; 
    NSString *newDate = [self getLocalDateFromUTCDateString:oldDate]; 
    if (newDate != nil) { 
     [replacedMsg replaceCharactersInRange:range0 withString:newDate]; 
     offset += [newDate length] - range0.length; 
    } 
}]; 

NSLog(@"%@", replacedMsg); 

输出(我的本地时区为GMT + 01):

Hello developers <br/><br/> On 2013-02-28 06:00:33 Bob wrote <br/><br/> 
Hello World <br/><br/> On 2013-02-27 09:35:33 Jack wrote <br/><br/> 
Hello Apple <br/><br/> On 2013-02-26 05:10:44 Tom wrote <br/><br/> 
+0

让我知道如果你需要更多的解释正则表达式! – 2013-04-20 10:47:41

+0

作品正是我正在寻找的!万分感谢。 – iOSAppDev 2013-04-20 12:18:22

+0

你能告诉我如何将HTML代码中的'li'标签替换为数字吗?这是我的问题http://stackoverflow.com/questions/16207919/repalce-ol-li-tags-from-html-code-with-number-in-ios-6 – iOSAppDev 2013-04-25 06:35:06