2010-10-01 15 views
61

NSString içinde bir yerden bir karakter almak istiyorum. Sonucun bir NSString olmasını istiyorum.NSString'den tek bir NSString karakteri nasıl elde edilir

[[s substringToIndex:i] substringToIndex:1] 

bunu yapmak için daha iyi bir yolu var mı:

Bu benim endeksinde en tek bir karakter almak için kullandığınız koddur?

+1

Eğer karakteri almak veya kaldırmak istiyor musunuz? Ya da almak ve kaldırmak? –

+0

Sadece karakteri almak istiyorum. –

cevap

124

Ayrıca bu, NSString olarak dizin i'de bir karakter alır ve yalnızca bir NSString yerine bir NSRange yapısını kullanırsınız.

NSString * newString = [s substringWithRange:NSMakeRange(i, 1)]; 
+5

10 Özellikle aşağıdaki sorunun cevabını kontrol edin. Benim çözümüm çok sayıda unicode karakter için çöp döndürecektir. –

+1

Cevap, tüm hikayeyi anlatmıyor. Emoji, cilt tonları, aksan işaretleri ve CJK karakterleri ile uğraştığınızda NSString zorlaşır. https://www.objc.io/issues/9-strings/unicode/ garip NSString'in daha fazla detayını ortaya koyuyor. –

23

Öneriniz yalnızca ASCII gibi basit karakterler için çalışır. NSStrings unicode'u saklar ve eğer karakteriniz birkaç unichars uzunsa, o zaman anlamsızlıkla sonuçlanabilirdiniz. Karakterinizin kaç tane unichars olduğunu belirlemek istiyorsanız

kullanın. Karakter sınırlarının nerede meydana geldiğini belirlemek için dizelerimi adım adım araştırıyorum.

Tamamen unicode mümkün olmak birazcık işe yarar, ancak hangi dilleri kullandığınıza bağlıdır. Birçok metin görüyorum, bu yüzden çoğu karakter bir yerden yayılıyor ve bu yüzden yapmam gereken bir iş.

+0

Bu yöntemin belge sayfası, Unicode sınırlarında başlangıç ​​ve bitiş aralıklarını ayarlamak için kullanışlı bir kod parçasına sahiptir. http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html – JeremyP

+0

"Özellikle hiç kimse" nin kaygısı geçerli ancak burada verilen bilgiler yanlış ve kafa karıştırıcı. NSStrings UTF-16 birimleri, bir 2 bayt kodlama şeması üzerine inşa edilmiştir ve dizginin uzunluğu, endeksi ve aralığı bu birimlerde ifade edilir. Tek UTF-16 birimleri, Doğu Asya da dahil olmak üzere modern dillerdeki karakterlerin büyük çoğunluğunu kapsamaktadır ve ASCII'den çok daha büyüktür. Bazı eski dillerden gelen karakterler veya aksan işaretli bazı karakterler gibi bir çift UTF-16 birimi (birleşik karakterler) olarak temsil edilmesi gereken kod noktaları vardır. Bunlarla uğraşırken NOIP'in tavsiyesi yardımcı olur. – CodePlumber

+0

UTF-16 tüm Çince karakterleri kapsıyor mu? –

32

Sadece bir NSString'den bir karakter almak istiyorsanız, bunu deneyebilirsiniz.

- (unichar)characterAtIndex:(NSUInteger)index; 

şöyle Kullanılan:

NSString *originalString = @"hello"; 
int index = 2; 
NSString *theCharacter = [NSString stringWithFormat:@"%c", [originalString characterAtIndex:index-1]]; 
//returns "e". 
+3

Tam olarak ihtiyacım olan şey bu, teşekkürler – Pavan

0
NSMutableString *myString=[NSMutableString stringWithFormat:@"Malayalam"]; 
NSMutableString *[email protected]""; 

for (int i=0; i<myString.length; i++) { 
    revString=[NSMutableString stringWithFormat:@"%c%@",[myString characterAtIndex:i],revString]; 
} 
NSLog(@"%@",revString); 
İlgili konular