私はNSString *string = @"Helo";
とNSString *editedString = @"Hello";
です。変更された文字または文字のインデックスの検索方法(例:@"l"
)NSStringの文字のインデックス
1
A
答えて
2
私は、あなたが望むことをするNSStringにカテゴリを書いています。私は、カテゴリメソッドのPostfixとして私のStackOverflowユーザー名を使用しました。これは、同じ名前のメソッドとの将来の起こりそうな可能性のある衝突を止めるためです。それを自由に変更してください。
まずインタフェース定義NSString+Difference.h
:
#import <Foundation/Foundation.h>
@interface NSString (Difference)
- (NSInteger)indexOfFirstDifferenceWithString_mttrb:(NSString *)string;
@end
と実装「NSStringの+ Difference.m`:
#import "NSString+Difference.h"
@implementation NSString (Difference)
- (NSInteger)indexOfFirstDifferenceWithString_mttrb:(NSString *)string; {
// Quickly check the strings aren't identical
if ([self isEqualToString:string])
return -1;
// If we access the characterAtIndex off the end of a string
// we'll generate an NSRangeException so we only want to iterate
// over the length of the shortest string
NSUInteger length = MIN([self length], [string length]);
// Iterate over the characters, starting with the first
// and return the index of the first occurence that is
// different
for(NSUInteger idx = 0; idx < length; idx++) {
if ([self characterAtIndex:idx] != [string characterAtIndex:idx]) {
return idx;
}
}
// We've got here so the beginning of the longer string matches
// the short string but the longer string will differ at the next
// character. We already know the strings aren't identical as we
// tested for equality above. Therefore, the difference is at the
// length of the shorter string.
return length;
}
@end
次のように、上記を使用します。
NSString *stringOne = @"Helo";
NSString *stringTwo = @"Hello";
NSLog(@"%ld", [stringOne indexOfFirstDifferenceWithString_mttrb:stringTwo]);
3
1
-rangeOfString:
を使用できます。たとえば、[string rangeOfString:@"l"].location
です。この方法にはいくつかのバリエーションがあります。
関連する問題
- 1. NSString内の文字のすべてのインデックスを返す
- 2. NSStringの特定のインデックスの文字を置換する
- 3. NSStringのエスケープ文字
- 4. ASCII文字のNSStringにintのNSStringのヘルプ?
- 5. ギリシャ文字でNSString to char *
- 6. NSStringのplistファイルからの文字列
- 7. NSStringの文字の位置を取得
- 8. NSString内の大文字のランダムな文字
- 9. NSStringの文字をアルファベット順にソート
- 10. NSString埋め込み/文字間のスペース
- 11. NSStringの長さ - 特殊文字
- 12. NSStringの特殊文字出力
- 13. NSStringの文字を置換する
- 14. Objective-C NSString文字の置換
- 15. 文字列のインデックス
- 16. インデックス - 文字列
- 17. NSStringパス文字列を削除する
- 18. NSStringでユニコード文字を使用する
- 19. NSString大文字を大文字に変換
- 20. PostgreSQLの文字列型インデックス
- 21. postgresqlインデックスの文字列
- 22. ロケール固有のインデックス文字
- 23. インデックスの分割文字列
- 24. 負の文字列インデックス
- 25. 文字列のインデックスJavaメソッド
- 26. NSString内のすべての文字を大文字にする方法
- 27. NSString内の文字セットに特定の文字を追加するには
- 28. インデックスが文字列
- 29. Matlabの偶数インデックス文字と奇数インデックス文字の切り替え
- 30. NSStringですべての文字を小文字にする方法は?
あなたは文字通り私の答えを別の方法で書き直しただけでなく、これを考慮しましたか?両方の文字列がnilの場合、長さ== 0で、位置0はそれらが異なる位置であることを示します。 – Vikings
メソッドが呼び出された文字列がnilの場合、私のメソッドは0を返します。両方の文字列をゼロにする必要はありません。このケースでは、nilに送られたメッセージは何も返さないので、あなたができることはあまりありません。あなたのバージョンの問題は、2つの文字列が同じステムを持ち、もう一方が長い場合は-1を返します。私はあなたのバージョンを修正するのを手伝ってくれました。あなたがそれを悪化させたと私の意見では、私は自分の答えで踏み込んだのです。私はあなたの答えを盗んだと感じたらごめんなさい。 – mttrb
+1私はそのような問題を見ていませんでした。また、あなたには余分な ';'長い整数 "%ld"を出力しないでください。 – Vikings