从NSCtring的中间截断子串

时间:2014-11-25 07:57:11

标签: ios uilabel nsattributedstring

我们如何从中间截断来自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;

这似乎没有做任何事情。任何人都建议我做错了什么

1 个答案:

答案 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”。

现在,您只需将结果添加到标签中,或将其添加到属性字符串中,即可获得更多自定义功能。

正如我在开始时说的那样。这是一个非常基本的正则表达式示例..

相关问题