2013-10-13 91 views
2

對於我正在處理的應用程序,我需要檢查一個文本字段是否僅包含字母A,T,C或G.此外,我想進行專門的錯誤任何其他輸入字符的消息。例如)「不要放入空格。」或「字母b不是可接受的值」。我已經閱讀了其他一些這樣的帖子,但他們是字母數字,我只想指定字符。檢查特定字符的Objective-C字符串

回答

4

一種方法,遠離獨特:

NString有方法來尋找子,表示爲偏移位置&的NSRange,從人物在給定的NSCharacterSet組成。

的一組應該是字符串什麼:

NSCharacterSet *ATCG = [NSCharacterSet characterSetWithCharactersInString:@"ATCG"]; 

和SET什麼不應該:

NSCharacterSet *invalidChars = [ATCG invertedSet]; 

現在,您可以搜索包括invalidChars的任何字符範圍:

NSString *target; // the string you wish to check 
NSRange searchRange = NSMakeRange(0, target.length); // search the whole string 
NSRange foundRange = [target rangeOfCharacterFromSet:invalidChars 
              options:0 // look in docs for other possible values 
               range:searchRange]; 

如果沒有無效字符,則foundRange.location將等於NSNotFound,否則您更改檢查foundRange中的字符範圍並生成您的專用錯誤消息。

重複此過程,根據foundRange更新searchRange,查找所有無效字符的運行。

您可以將找到的無效字符累積到一個集合中(可能爲NSMutableSet),並在最後生成錯誤消息。

您還可以使用正則表達式,請參閱NSRegularExpressions

等等HTH

附錄

還有就是要解決這個問題一個非常簡單的方式,但我並沒有把它作爲你給的字母建議我可能要處理非常長的字符串並且使用上述提供的方法可能是有價值的勝利。但是您的評論後,第二個想法,也許我應該包括它:

NSString *target; // the string you wish to check 
NSUInteger length = target.length; // number of characters 
BOOL foundInvalidCharacter = NO; // set in the loop if there is an invalid char 

for(NSUInteger ix = 0; ix < length; ix++) 
{ 
    unichar nextChar = [target characterAtIndex:ix]; // get the next character 

    switch (nextChar) 
    { 
     case 'A': 
     case 'C': 
     case 'G': 
     case 'T': 
     // character is valid - skip 
     break; 

     default: 
     // character is invalid 
     // produce error message, the character 'nextChar' at index 'ix' is invalid 
     // record you've found an error 
     foundInvalidCharacter = YES; 
    } 
} 

// test foundInvalidCharacter and proceed based on it 

HTH

+0

如何檢查一系列字符?你可以告訴我,我仍然試圖學習所有這些目標 - C的東西,其中很多。 – MacBoss123541

+0

再次有很多種方法,但最簡單的層次是'NSString'上的'characterAtIndex:'方法 - 範圍會給出起始索引和長度,因此一個簡單的循環可以依次檢查每個字符。有一些方法可以讓你將範圍作爲一個'NSString',等等。閱讀'NSString',或者'NSMutableSet',doc頁面。 – CRD

2

使用NSRegulareExpression這樣。

NSString *str = @"your input string"; 
NSRegularExpression *regEx = [NSRegularExpression regularExpressionWithPattern:@"A|T|C|G" options:0 error:nil]; 
NSArray *matches = [regEx matchesInString:str options:0 range:NSMakeRange(0, str.length)]; 
for (NSTextCheckingResult *result in matches) { 
    NSLog(@"%@", [str substringWithRange:result.range]); 
} 

此外,對於選項參數,你必須在文檔中找一個合適的選擇。你

+0

究竟是for循環做什麼? – MacBoss123541

+0

上面的方法返回字符串中的所有匹配項,因此您必須循環它們並分別提取每個匹配項。 –

+0

另外我注意到我沒有提供圖案!如果要匹配A,T,C或G,請使用@「A | T | C | G」作爲模式。 –