NSString
からsize
のUITextField
をランダムに受け入れ、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?
}
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))
これを試して、
NSString *lastFourChar = [yourNewString substringFromIndex:[yourNewString length] - 4];
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}
)