如何从NSString中捕获最后4个字符

我从UITextField接受一个随机sizeNSString ,并将它传递给我创build的方法,该方法将只捕获在stringinput的最后4个字符。

我已经通过NSString类参考库看,唯一真正的select,我发现,看起来像它会做我想要的是

 - (void)getCharacters:(unichar *)buffer range:(NSRange)aRange 

我曾经使用过一次,但有静态参数'不会改变',但是对于这个实现,我想要使用非静态参数,这取决于进入的string的大小。

到目前为止,这是我创build的方法是从IBAction其他地方传递一个NSString

 - (void)padString:(NSString *)funcString { NSString *myFormattedString = [NSString stringWithFormat:@"%04d",[funcString intValue]]; // if less than 4 then pad string // NSLog(@"my formatedstring = %@", myFormattedString); int stringLength = [myFormattedString length]; // captures length of string maybe I can use this on NSRange? //NSRange MyOneRange = {0, 1}; //<<-------- should I use this? if so how? } 

使用substringFromIndex方法,

OBJ-C:

 NSString *trimmedString=[string substringFromIndex:MAX((int)[string length]-4, 0)]; //in case string is less than 4 characters long. 

迅速:

 let trimmedString: String = (s as NSString).substringFromIndex(max(s.length-4,0)) 

尝试这个,

 NSString *lastFourChar = [yourNewString substringFromIndex:[yourNewString length] - 4]; 

KingOfBliss提供的Swift答案在XCode 7.3中对我产生了一个错误,由于桥接到NS类,所以不应该继续使用,这应该在Swift 3.0中删除。

一个更好的例子,认为一个无效的范围,以及特殊字符的可能性,以提供正确的位置删除:

有问题的string:Voulez-vous uncafé?

 var trimmedString = "Voulez-vous un caf\u{65}\u{301}?" let stringSize = trimmedString.characters.count let startIndex = 4 if stringSize >= startIndex { let range = trimmedString.endIndex.advancedBy(-startIndex)..<trimmedString.endIndex trimmedString.removeRange(range) } 

这将产生Voulez-vous un c的答案。

通过访问具有开始和结束索引值的string,可以防止不是所有字符的大小相同(例如: \u{65}\u{301}