Как захватить последние 4 символа из NSString - PullRequest
34 голосов
/ 06 июля 2011

Я принимаю NSString случайного size от UITextField и передаю его методу, который я создаю, который будет захватывать только последние 4 символа, введенные в string.

Я просмотрел библиотеку NSString Class Reference, и единственная найденная мною опция, которая выглядит так, как будто она будет делать то, что мне нужно, это

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

. Я использовал это однажды, но со статическойпараметры, «которые не меняются», но для этой реализации я хочу использовать нестатические параметры, которые меняются в зависимости от размера входящей строки.

До сих пор это метод, который я создал, который в настоящее времяпередал NSString от IBAction еще где.

- (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?

}

Ответы [ 3 ]

94 голосов
/ 06 июля 2011

Используйте метод substringFromIndex,

OBJ-C:

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))
9 голосов
/ 18 апреля 2015

Попробуйте,

NSString *lastFourChar = [yourNewString substringFromIndex:[yourNewString length] - 4];
0 голосов
/ 05 апреля 2016

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

Thisдаст ответ Voulez-vous un c.

Получая доступ к строке со значениями индекса начала и конца, вы защищаете от ситуаций, когда не все символы имеют одинаковый размер (например: \u{65}\u{301})

...