NSString(7)

2010. 04. 04
長かったNSStringクラスのメソッドの解説も、今回でひとまず終わりです。

『パスの処理』の一部メソッドを除き、サンプルコードが上手く組めなかったりしたので説明のみになります。

●エンコーディングの処理(Working with Encodings)

・+ availableStringEncodings

+ (const NSStringEncoding *)availableStringEncodings

アプリケーション環境がサポートしているエンコーディングを、0終端の文字列オブジェクトのリストで返します

一般的によく使われるエンコーディングには次のようなものがあります
・NSASCIIStringEncoding
・NSUnicodeStringEncoding
・NSISOLatin1StringEncoding
・NSISOLatin2StringEncoding
・NSSymbolStringEncoding
他のエンコーディングに関しては『文字コードのエンコーディング』を参照してください

これ以外にCore FoundationのエンコーディングをCFStringConvertEncodingToNSStringEncoding関数で変換して追加する事もできます


・+ defaultCStringEncoding

+ (NSStringEncoding)defaultCStringEncoding

C文字列のエンコーディングを返します

このメソッドは、ユーザのデフォルト言語や他の要素によって設定されているエンコーディングを返します
未知のエンコーディングのユーザ文書を処理する際、他に手掛かりが無い場合に必要となるかもしれません
ただし、場合によっては予期しないエンコーディングになる可能性もあります

このメソッドは、stringWithCString:などのC文字列の処理で引数で使います
C文字列のエンコーディングは、デフォルトではシステムによって決定されており、個々のプログラムで決まるものではありません


・+ localizedNameOfStringEncoding:

+ (NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding

人が読めるエンコーディング名を返します
各エンコーディングに付与されている番号を、ロケールの言語で表します
(『文字コードのエンコーディング』を参照)

encoding:エンコーディング番号を指定します


・– canBeConvertedToEncoding:

– (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding

損失無しでエンコーディングができたかどうかをブール値で返します

できた場合はYESを、エンコーディングの過程で文字に変更や削除があった場合はNOを返します

dataUsingEncoding:などで文字列の変換を行い、失敗してnilが返って来る場合は、このメソッドを呼び出してオーバーヘッドを回避する事ができます

encoding:文字列のエンコーディングを指定します


・– dataUsingEncoding:

– (NSData *)dataUsingEncoding:(NSStringEncoding)encoding

指定したエンコーディングでエンコードしたNSDataオブジェクトを返します

dataUsingEncoding:allowLossyConversion:の2番目の引数にNOを指定したものになるので可逆変換になります
不可逆変換で構わない場合はdataUsingEncoding:allowLossyConversion:を使用してください

encoding:文字列のエンコーディングを指定します


・– dataUsingEncoding:allowLossyConversion:

– (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)flag

指定したエンコーディングでエンコードしたNSDataオブジェクトを返します

flagでNOを指定し、アクセントなどの情報に損失があった場合はnilを返します

flagがYESの場合、変換時にいくつかの情報を失うことがあります
例えば、NSUnicodeStringEncodingからNSASCIIStringEncodingへ変換する場合、『Á』のアクセントが欠落して『A』になります

このメソッドは、バイトオーダーを気にせず安全にファイルを書き出す事ができます
このメソッドで損失無しの変換でプレーンテキストを作り、文字列オブジェクトへの変換や保存をすることを推奨します

encoding:文字列のエンコーディングを指定します
flag:YESの場合は文字の削除や変更を許可します


・– description

– (NSString *)description

レシーバを返します


・– fastestEncoding

– (NSStringEncoding)fastestEncoding

情報損失無しで最速なエンコーディングを返します
このメソッドは空間効率が良くありません


・– smallestEncoding

– (NSStringEncoding)smallestEncoding

情報損失無しで最小なエンコーディングを返します
このメソッドは実行に時間がかかる場合が有り、速くはありませんが空間効率は良いです


●パスの処理(Working with Paths)

・+ pathWithComponents:

+ (NSString *)pathWithComponents:(NSArray *)components

指定した配列の中の文字列を、パスの区切り文字『/』を挟んだ文字列にして返します

最初に『/』が入り、以降『/』で分割していきます
最後に『/』を含めたい場合は空の要素を入れます

このメソッドでは完全なパスを作れません
親ディレクトリなど参照を含めたものにするには、stringByStandardizingPathを使用してください

components:NSStringオブジェクトの配列を指定します

NSArray *arr = [NSArray arrayWithObjects:@" ",@"Haruka",@"Chihaya",@"Yukiho",@" ",nil];
NSString *str = [NSString pathWithComponents:arr];
NSLog(str);    //    /Haruka/Chihaya/Yukiho/


・– pathComponents

– (NSArray *)pathComponents

パス区切り文字『/』で区切られた要素を含むNSStringオブジェクトから配列を作ります

文字列の最初か最後が『/』になっている場合は、『/』が要素に含まれます
『/』が連続した場合は空の要素と見なして削除されます

『/』が無い場合はその文字列のみが要素の配列になります

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)

NSString *path = @"/tmp/scratch";
NSArray *arr = [path pathComponents];    //    arr( / , tmp , scratch )


・– completePathIntoString:caseSensitive:matchesIntoArray:filterTypes:

– (NSUInteger)completePathIntoString:(NSString **)outputName caseSensitive:(BOOL)flag matchesIntoArray:(NSArray **)outputArray filterTypes:(NSArray *)filterTypes

指定した配列の中で、レシーバのパスと一致するものを検索し、且つファイルパスとして完成しているかどうかをチェックし、適合するパスがあれば最長のものを返します

一致するものが無ければ0を、一致すれば1を返します
複数一致する場合は、outputArrayに含まれるその数を返します
outputArrayがNULLの場合、正の値を返します

outputName:レシーバと適合する最長パスの名前を指定します

flag:完了可能と考えられる場合はYESを指定します

outputArray:一致する全てのファイル名の配列を指定します

filterTypes:NSStringオブジェクトの配列で、パスとして完了するかを判断する拡張子を指定します(区切り文字『/』は含めない)


・– fileSystemRepresentation

– (const char *)fileSystemRepresentation

ファイルパスとして有効なC文字列を返します
getFileSystemRepresentation:maxLength:

戻り値のC文字列はレシーバの解放と同時に解放されるので、必要ならばgetFileSystemRepresentation:maxLength:でコピーして格納してください

レシーバの文字列をファイルパスにエンコーディングできなかった場合は、NSCharacterConversionExceptionを発生させます

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)

戻り値のC文字列をNSStringオブジェクトにするには、stringWithFileSystemRepresentation:length:を使用してください

NSString *str = @"/tmp/chihaya";
NSLog(@"%s", [str fileSystemRepresentation]);


・– getFileSystemRepresentation:maxLength:

– (BOOL)getFileSystemRepresentation:(char *)buffer maxLength:(NSUInteger)maxLength

レシーバにファイルパスとして有効なC文字列があればバッファに格納し、正否を返します

ファイルパスとして有効なC文字列が得られた場合はYESを返します
バッファの長さが足りなかったり、ファイルパスとして有効でなかった場合はNOを返します

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)

buffer:有効なファイルパスを、NULL終端のC文字列として格納するバッファを指定します

length:ファイルパスを格納するバッファの長さを指定します
NULL終端分を含めた十分な長さを指定してください


・– isAbsolutePath

– (BOOL)isAbsolutePath

絶対パスかどうかをBOOL値で返します

絶対パスならYESを、相対パスならNOを返します

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)

このパスにファイルが存在しているかどうかはチェックされません
(fileExistsAtPath:または類似のNSFileManagerのメソッドを使用してください)


・– lastPathComponent

– (NSString *)lastPathComponent

パスの最後の要素を返します

戻り値の例を下表に示します

レシーバの文字列戻り値の文字列
"/tmp/scratch.tiff""scratch.tiff"
"/tmp/scratch""scratch"
"/tmp/""tmp"
"scratch""scratch"
"/""/"

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)


・– pathExtension

– (NSString *)pathExtension

ファイルパスの拡張子を返します

戻り値の例を下表に示します

レシーバの文字列戻り値の文字列
"/tmp/scratch.tiff""tiff"
"/tmp/scratch"""(空の文字列)
"/tmp/"""(空の文字列)
"/tmp/scratch..tiff""tiff"

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)


・– stringByAbbreviatingWithTildeInPath

– (NSString *)stringByAbbreviatingWithTildeInPath

現在のユーザのホームディレクトリへのフルパスの代わりに、チルダ(~)を用いた相対パスを新規の文字列として返します

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)


・– stringByAppendingPathComponent:

– (NSString *)stringByAppendingPathComponent:(NSString *)aString

レシーバの文字列に指定した文字列を追加した新規の文字列を返します

パスの区切り文字『/』は必要に応じて付与します

aString:パスに追加する文字列を指定します

aStringを"scratch.tiff"にした場合の、戻り値の例を下表に示します

レシーバの文字列戻り値の文字列
"/tmp""/tmp/scratch.tiff"
"/tmp/""/tmp/scratch.tiff"
"/""/scratch.tiff"
""(空の文字列)"scratch.tiff"

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)


・– stringByAppendingPathExtension:

– (NSString *)stringByAppendingPathExtension:(NSString *)ext

レシーバの文字列に指定した文字列を拡張子として追加し、新規の文字列を返します

ext:追加する拡張子を指定します

パスの区切り文字『/』は必要に応じて付与します

aString:パスに追加する文字列を指定します

extを"tiff"にした場合の、戻り値の例を下表に示します

レシーバの文字列戻り値の文字列
"/tmp/scratch.old""/tmp/scratch.old.tiff"
"/tmp/scratch.""/tmp/scratch..tiff"
"/tmp/""/tmp.tiff"
"scratch""scratch.tiff"

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)


・– stringByDeletingLastPathComponent

– (NSString *)stringByDeletingLastPathComponent

パスの最後の要素をパスの区切り文字『/』と共に削除し、新規の文字列を返します

ルートパスの場合は変更しません

戻り値の例を下表に示します

レシーバの文字列戻り値の文字列
"/tmp/scratch.tiff""/tmp"
"/tmp/lock/""/tmp"
"/tmp/""/"
"/tmp""/"
"/""/"
"scratch.tiff"""(空の文字列)

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)


・– stringByDeletingPathExtension

– (NSString *)stringByDeletingPathExtension

拡張子を削除し、新規の文字列を返します

最後がパスの区切り文字『/』の場合は『/』を削除します

ルートパスの場合は変更しません

戻り値の例を下表に示します

レシーバの文字列戻り値の文字列
"/tmp/scratch.tiff""/tmp/scratch"
"/tmp/""/tmp"
"scratch.bundle/""scratch"
"scratch..tiff""scratch."
".tiff"".tiff"
"/""/"

レシーバが拡張子のみの場合、削除されないので注意してください

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)


・– stringByExpandingTildeInPath

– (NSString *)stringByExpandingTildeInPath

チルダ『~』または『~user』の相対パスを絶対パスに展開し、新規文字列を返します

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)


・– stringByResolvingSymlinksInPath

– (NSString *)stringByResolvingSymlinksInPath

シンボリックリンク(MacOSのエイリアスやWindowsのショートカットに相当する参照情報で、実体へのファイルパスを示す)を標準パスに変換し、新規文字列を返します

エラーが発生した場合はselfを返します

レシーバのパス名が『/private』で始まる場合は、そのまま返します


・– stringByStandardizingPath

– (NSString *)stringByStandardizingPath

無関係なパスの要素を除外して、新しい文字列を返します

シンボリックリンクを検出した場合は、stringByResolvingSymlinksInPathを呼び出します

無効なパス名の場合は、stringByResolvingSymlinksInPathを試しますが、結果が不明瞭になります

パス要素が無い場合は、selfを返します

戻り値の中にシンボリックリンクが残っている場合があります

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)

このメソッドは文字列に以下の変更を加えられます

・チルダで始まる場合、stringByExpandingTildeInPathで展開します

・空の要素と現在のディレクトリ(『//』と『/./』)は削除され、一つのパス区切り文字『/』になります

・絶対パスの場合、stringByResolvingSymlinksInPathを使って親ディレクトリを参照し、シンボリックリンクがないか確認・解消します

・相対パスの場合、シンボリックリンクが解決できないため、親ディレクトリが残ります

・『/private』で始まる場合は、そのまま返します
(そのパスにファイルが存在しているかどうかはチェックされません)


・– stringsByAppendingPaths:

– (NSArray *)stringsByAppendingPaths:(NSArray *)paths

レシーバの文字配列に、指定した文字配列とパス区切り文字『/』を追加して返します

このメソッドはファイルパスに対してのみ使用してください(URLなどで使わないこと)

paths
:追加するパスの文字配列を指定します


●URLの処理(Working with URLs)


・– stringByAddingPercentEscapesUsingEncoding:

– (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

指定したエンコーディングを使ってURLを変換し、URLエンコーディング文字列を返します

変換に失敗した場合はnilを返します

ku/stringByAddingPercentEscapesUsingEncodingは使ってはいけない』によりますと、本来エスケープして欲しい文字が除外できないメソッドのようです

エスケープされる文字は、
 (U+0020) " # % > < [  ] ^ ` { | }
の14文字です

一般的には、より複雑な設定のできるCFURLCreateStringByAddingPercentEscapesを使うようです

encoding:エンコーディングを指定します


・– stringByReplacingPercentEscapesUsingEncoding:

– (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

指定したエンコーディングを使ってURLエンコーディング文字列を変換し、URLを返します

変換に失敗した場合はnilを返します

より複雑な設定をする場合は、CFURLCreateStringByReplacingPercentEscapesを使います

encoding:エンコーディングを指定します



参考文献

NSString Class Reference

Cocoa APIとか(iPhoneとか)/NSString

Studying Cocoa/NSString

Wikipedia/シンボリックリンク

ku/stringByAddingPercentEscapesUsingEncodingは使ってはいけない

ロックスターになりたい/stringByAddingPercentEscapesUsingEncodingがエスケープする文字

0 CommentsPosted in 資料





QuietControl 30 wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

QuietControl 30 wireless headphones
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR