Bir dizenin belirli bir kelime içerip içermediğini nasıl anlarım? Örneğin, aşağıda yazan bir dizem var:
@"Here is my string."
Örneğin "eşittir" gibi dizede bir kelime tespit edip edemeyeceğimi bilmek istiyorum.
rangeOfString.
Bir dizenin belirli bir kelime içerip içermediğini nasıl anlarım? Örneğin, aşağıda yazan bir dizem var:
@"Here is my string."
Örneğin "eşittir" gibi dizede bir kelime tespit edip edemeyeceğimi bilmek istiyorum.
rangeOfString.
Yanıtlar:
İşte bunu nasıl yapacağım:
NSString *someString = @"Here is my string";
NSRange isRange = [someString rangeOfString:@"is " options:NSCaseInsensitiveSearch];
if(isRange.location == 0) {
//found it...
} else {
NSRange isSpacedRange = [someString rangeOfString:@" is " options:NSCaseInsensitiveSearch];
if(isSpacedRange.location != NSNotFound) {
//found it...
}
}
Bunu kategori olarak kolayca şuraya ekleyebilirsiniz NSString:
@interface NSString (JRStringAdditions)
- (BOOL)containsString:(NSString *)string;
- (BOOL)containsString:(NSString *)string
options:(NSStringCompareOptions)options;
@end
@implementation NSString (JRStringAdditions)
- (BOOL)containsString:(NSString *)string
options:(NSStringCompareOptions)options {
NSRange rng = [self rangeOfString:string options:options];
return rng.location != NSNotFound;
}
- (BOOL)containsString:(NSString *)string {
return [self containsString:string options:0];
}
@end
containsStringNSString'de maruz adında yeni bir yöntem var .
Kelimeyi cümle içinde taramak için aşağıdaki kodu kullanın.
NSString *sentence = @"The quick brown fox";
NSString *word = @"quack";
if ([sentence rangeOfString:word].location != NSNotFound) {
NSLog(@"Yes it does contain that word");
}
İOS8'de artık şunları kullanabilirsiniz:
BOOL containsString = [@"Here is my string." containsString:@"is"];
İOS7'ye nasıl "uyarlanacağına" dair ilginç bir gönderi var: http://petersteinberger.com/blog/2014/retrofitting-containsstring-on-ios-7/
NSLinguisticTagger'ı kullanmanızı tavsiye ederim . Aramak için kullanabilirizHere is my string. His isn't a mississippi isthmus. It is?
NSLinguisticTagger *linguisticTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[
NSLinguisticTagSchemeTokenType,
]
options:
NSLinguisticTaggerOmitPunctuation |
NSLinguisticTaggerOmitWhitespace |
NSLinguisticTaggerOmitOther ];
[linguisticTagger setString:@"Here is my string. His isn't a mississippi isthmus. It is?"];
[linguisticTagger enumerateTagsInRange:NSMakeRange(0,
[[linguisticTagger string] length])
scheme:NSLinguisticTagSchemeTokenType
options:
NSLinguisticTaggerOmitPunctuation |
NSLinguisticTaggerOmitWhitespace |
NSLinguisticTaggerOmitOther |
NSLinguisticTaggerJoinNames
usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
NSLog(@"tag: %@, tokenRange: %@, sentenceRange: %@, token: %@",
tag,
NSStringFromRange(tokenRange),
NSStringFromRange(sentenceRange),
[[linguisticTagger string] substringWithRange:tokenRange]);
}];
Bu çıktılar:
tag: Word, tokenRange: {0, 4}, sentenceRange: {0, 19}, token: Here
tag: Word, tokenRange: {5, 2}, sentenceRange: {0, 19}, token: is
tag: Word, tokenRange: {8, 2}, sentenceRange: {0, 19}, token: my
tag: Word, tokenRange: {11, 6}, sentenceRange: {0, 19}, token: string
tag: Word, tokenRange: {19, 3}, sentenceRange: {19, 33}, token: His
tag: Word, tokenRange: {23, 2}, sentenceRange: {19, 33}, token: is
tag: Word, tokenRange: {25, 3}, sentenceRange: {19, 33}, token: n't
tag: Word, tokenRange: {29, 1}, sentenceRange: {19, 33}, token: a
tag: Word, tokenRange: {31, 11}, sentenceRange: {19, 33}, token: mississippi
tag: Word, tokenRange: {43, 7}, sentenceRange: {19, 33}, token: isthmus
tag: Word, tokenRange: {52, 2}, sentenceRange: {52, 6}, token: It
tag: Word, tokenRange: {55, 2}, sentenceRange: {52, 6}, token: is
Görmezden geliyor His mississippive isthmushatta isiçini tanımlıyor isn't.
Umarım bu size yardımcı olur, .. bu satırı .m dosyasına ekleyin veya ayrı bir sınıf oluşturun ve bu kodu entegre edin.
@implementation NSString (Contains)
- (BOOL) containsString: (NSString*) substring
{
NSRange range = [self rangeOfString : substring];
BOOL found = ( range.location != NSNotFound );
return found;
}
@end
Tam bir çözüm önce dizeyi tarar (boşluklar eklenmeden), ardından hemen önceki karakterin boş mu yoksa satır başı mı olduğunu kontrol eder. Benzer şekilde, hemen sonraki karakterin boş mu yoksa satır sonu mu olduğunu kontrol edin. Her iki test de başarılı olursa, bir eşleşme var demektir. Ayrıca kontrol edebileceğiniz İhtiyaçlarınıza bağlı olarak ,, ., ()vb
Elbette alternatif bir yaklaşım, dizeyi kelimelere ayırmak ve her kelimeyi ayrı ayrı kontrol etmektir.