我们如何从中间截断来自NSString的子串 比方说,我有NSString NSString * str = @“2014年11月25日星期四/共享/文件/图纸/ c” 我想从中间和中间截断路径字符串在标签上显示。为此我在标签上使用NSStrinbuteString
NSString *path = @"/Shared/Documents/Drawing/c";
NSString *date = @"Thu 25 Nov 2014";
NSString *wholeString = self.descLabel.text;
NSRange pathRange = [wholeString rangeOfString:path];
NSRange range=NSMakeRange(pathRange.location,path.length);
NSMutableParagraphStyle* style= [NSMutableParagraphStyle new];
style.lineBreakMode= NSLineBreakByTruncatingMiddle;
NSMutableAttributedString* str=[[NSMutableAttributedString alloc]initWithString: self.descLabel.text];
[str addAttribute: NSParagraphStyleAttributeName value: style range: range];
self.descLabel.attributedText= str;
这似乎没有做任何事情。任何人都建议我做错了什么
答案 0 :(得分:1)
使用非常简单的正则表达式的一个不那么优化的例子。此示例要求路径以正斜杠开头,并且路径始终为最后一个。
NSString *test = @"Thu 25 Nov 2014 /Shared/Documents/Drawing/c";
NSString *resultPath = @"";
// Create a range for it. We do the replacement on the whole
// range of the text, not only a portion of it. This can be optimized.
NSRange range = NSMakeRange(0, test.length);
NSError *errors = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(/.*)" options:NSRegularExpressionCaseInsensitive|NSRegularExpressionDotMatchesLineSeparators error:&errors];
NSArray *matches = [regex matchesInString:test options:NSMatchingProgress range:range];
if(matches.count == 1 && !errors) {
NSTextCheckingResult* result = matches[0];
// One result found
resultPath = [test substringWithRange:result.range];
} else {
// many results found or error
}
resultPath现在将包含:“/ Shared / Documents / Drawing / c”。
现在,您只需将结果添加到标签中,或将其添加到属性字符串中,即可获得更多自定义功能。
正如我在开始时说的那样。这是一个非常基本的正则表达式示例..