web-dev-qa-db-ja.com

Objective-C-文字列から最後の文字を削除する

IOSのObjective-Cでは、ボタンアクションを使用して文字列の最後の文字を削除するにはどうすればよいですか?

150
Omar

コントローラークラスで、Interface Builderでボタンをフックするアクションメソッドを作成します。このメソッド内で、次のように文字列をトリミングできます。


if ([string length] > 0) {
    string = [string substringToIndex:[string length] - 1];
} else {
    //no characters to delete... attempting to do so will result in a crash
}






1行のコードでこれを行うためのおしゃれな方法が必要な場合は、次のように記述できます。

string = [string substringToIndex:string.length-(string.length>0)];

*派手な1行のコードスニペットの説明:

削除する文字がある場合(つまり、文字列の長さが0より大きい)
(string.length>0)1を返すため、コードは次のように戻ります。
string = [string substringToIndex:string.length-1];

削除する文字がない場合(つまり、文字列の長さが0より大きくない場合)
(string.length>0)0を返すため、コードは次のように戻ります。
string = [string substringToIndex:string.length-0];
クラッシュを防ぎます。

416

NSMutableStringの場合(動的に変更するのでお勧めします)、次を使用できます。

[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
52
Dave DeLong

ここで示されている解決策は、実際にはマルチバイトのUnicode文字(「合成文字」)を考慮していないため、無効なUnicode文字列が生じる可能性があります。

実際、substringToIndexの宣言を含むiOSヘッダーファイルには、次のコメントが含まれています。

ヒント:rangeOfComposedCharacterSequencesForRange:で使用して、合成文字の分割を回避します

rangeOfComposedCharacterSequenceAtIndex:の使用方法 を参照して、最後の文字を正しく削除してください。

8
user1071136

ドキュメンテーションはあなたの友達です。NSStringsubstringWithRange呼び出しをサポートします。これは、短縮された文字列を返す文字列を短縮できます。 NSStringのインスタンスは変更できません。それは不変です。 NSMutableStringがある場合、deleteCharactersInRangeと呼ばれるメソッドを使用して、所定の場所で文字列を変更できます

...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
6