web-dev-qa-db-ja.com

NSStringから最後の4文字をキャプチャする方法

NSStringからsizeUITextFieldをランダムに受け入れ、stringに入力された最後の4文字のみをキャプチャーする私が作成しているメソッドに渡します。

私はNSStringクラス参照ライブラリを調べましたが、私が見つけた唯一の実際のオプションは、それが私が望んでいることを実行するように見えます

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

私はこれを以前に1回使用しましたが、「変更しない」静的パラメーターを使用しましたが、この実装では、入ってくる文字列のサイズに応じて変化する非静的パラメーターを使用したいと考えています。

これまでのところ、これは私が作成したメソッドであり、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?

}
35
C.Johns

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))
94
KingofBliss

これを試して、

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

Swift回答はXCode 7.3の時点で私にエラーを生成しており、NSクラスへのブリッジングのため、今後は使用しないでください。 Swift 3.0で削除する必要があります。

無効な範囲と、削除する適切な場所を提供する特殊文字の可能性を考慮するより良い例:

問題の文字列: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の回答が生成されます。

開始インデックス値と終了インデックス値で文字列にアクセスすることにより、すべての文字が同じサイズではない状況から保護します(例:\u{65}\u{301}

0
CodeBender