Как захватить последние 4 символа из NSString
Я принимаю NSString
случайного size
из UITextField
и передавая его методу, который я создаю, который будет захватывать только последние 4 символа, введенные в string
.
Я просмотрел библиотеку классов NSString
Class Reference и единственную реальную опцию, которую я нашел, которая выглядит так, как будто она будет делать то, что я хочу.
- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange
Я использовал это один раз раньше, но со статическими параметрами, которые не меняются '. Но для этой реализации я хочу использовать нестатические параметры, которые меняются в зависимости от размера входящей строки.
Пока это метод, который я создал, который передается NSString
из IBAction else где.
- (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?
}
Ответы
Ответ 1
Используйте метод substringFromIndex,
OBJ-С:
NSString *trimmedString=[string substringFromIndex:MAX((int)[string length]-4, 0)]; //in case string is less than 4 characters long.
SWIFT:
let trimmedString: String = (s as NSString).substringFromIndex(max(s.length-4,0))
Ответ 2
Попробуйте это,
NSString *lastFourChar = [yourNewString substringFromIndex:[yourNewString length] - 4];
Ответ 3
Ответ Swift, предоставленный KingOfBliss, создает ошибку для меня с XCode 7.3 и не следует использовать в будущем из-за перехода на NS классы, которые следует удалить в Swift 3.0.
Лучший пример, который учитывает недопустимый диапазон, а также возможность того, чтобы специальные символы отображали нужное место для удаления:
Соответствующая строка: Voulez-vous un café?
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
.
Получив доступ к строке с начальными и конечными значениями индекса, вы защищаете от ситуаций, когда не все символы имеют одинаковый размер (например: \u{65}\u{301}
)