Подтвердить что ты не робот

Как захватить последние 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?

}
4b9b3361

Ответ 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})