这是我的问题here的次要问题,但有人建议将问题分开以便做出更好的回应。
我有单独的数据行,如下所示,分别传递给函数。
Mon-Wed 930-1700 Thu 900-1700 Fri 930-1700
Mon-Wed 930-1700 Thu 900-1700 Fri 930-1700 Sat 900-1200, Home Lending Sat 900-1600
Mon-Thu 900-1600, Fri 900-1700
需要它阅读如下:
Mon-Wed 9:30am-5:00pm;Thu 9:00am-5:00pm;Fri 9:30am-5:00pm;Sat 9:00am-12:00pm, Home Lending Sat 9:00am-4:00pm
我需要将时间转换为12小时而不是像
那样相对容易if (time > 1200) {
time = time - 1200
//add the pm and the colon :
} else {
//add the am and the colon :
}
我的问题是,我该如何:
- 首先寻找数字
- 将它们拉出并转换为int来执行计算(我认为使用intValue)
- 进行计算并将它们插回到字符串的相同位置,包括am / pm和冒号。
我一直在使用RegexKitLite的正则表达式,但我怎么记得将它插回到字符串中的位置,以及如何从字符串中删除已经存在的内容来替换它?例如1700.我假设使用MutableStrings但需要一些帮助。
以下是我一直在研究的一些代码,但如果有一个更简单的解决方案意味着将其丢掉,我不介意......
NSString *regexString = @"(\\s|-?)(\\d{3,4})(;?|\\s?|-?)";
NSRange matchedRange = NSMakeRange(NSNotFound,NSNotFound);
//loop while we haven't fixed all times in the string
while (!matchedRange.length == 0) {
matchedRange = [openingHoursString rangeOfRegex:regexString capture: 2];
if (!matchedRange.length == 0) {
NSString *digits = [openingHoursStrinig substringWithRange: matchedRange];
NSLog(@"digits string: %@", digits);
//do calculations and add colon to digits string and reinsert to openingHoursString
}
}
答案 0 :(得分:2)
答案 1 :(得分:0)
这是一个未经测试的想法:
NSString *regexString = @"\\d+|\\D+";
NSMutableString* result = [NSMutableString string];
for(NSString *match in [openingHoursString componentsMatchedByRegex:regexString])
{
if ([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[match characterAtIndex:0]]) {
int t = [match intValue];
BOOL pm = t >= 1200;
if (t >= 1300)
t -= 1200;
[result appendFormat:@"%d:%02d%s", t / 100, t % 100, pm ? "pm" : "am"];
} else {
[result appendString:match];
}
}