2015-01-29 29 views
6

Son karakteri bir dizgiden kaldırmak için birçok yöntem gördüm. Ancak, endeksine dayanarak eski karakterleri kaldırmanın bir yolu var mı? Her zaman dize kontrol etmelidir TabiiDizeden nth karakteri çıkar

var s = "Hello, I must be going" 

s.removeAtIndex(advance(s.startIndex, 5)) 

println(s) // prints "Hello I must be going" 

: string endeksleri rasgele erişimli değildir ve sayılar olmasa da

cevap

10

, sen n'inci karakterini erişmek için bir dizi bunları ilerlemeden Bunu yapmadan önce en az 5 uzunluğundadır!

düzenleme: @MartinR işaret ettiği gibi, sen sonuna geçmiş çalışan riskini önlemek için önceden bir ile uç-indeksi sürümünü kullanabilirsiniz: Her zamanki gibi

let index = advance(s.startIndex, 5, s.endIndex) 
if index != s.endIndex { s.removeAtIndex(index) } 

, opsiyoneldir arkadaşınız vardır:

// find returns index of first match, 
// as an optional with nil for no match 
if let idx = s.characters.index(of:",") { 
    // this will only be executed if non-nil, 
    // idx will be the unwrapped result of find 
    s.removeAtIndex(idx) 
} 
+1

yerine önceden * uzunluk * kontrol w bir alternatif olarak izin 'indeksi = ileri (s.startIndex, 5, s.endIndex) kullanabilir; eğer indeks! = s.endIndex {s.removeAtIndex (index)} '. –

+0

Harika bir nokta. Bir şekilde, 'bul' benzeri bir isteğe benzer bir seçenek döndürdüyse iyi olurdu, ama sanırım bunun anlamı, 'sonun' sonuna eklemek yerine yasal bir endeks olduğu durumlarda daha az yararlı olacaktır. -eksa sentinel. –

+0

Evet. [Here] (http://stackoverflow.com/a/26691258/1187415), bu 'advance()' yönteminin geçerli (isteğe bağlı olmayan) bir dizin döndürdüğü gerçeğin kullanıldığı basit bir örnektir. –

0

var hello = "hello world!"

en biz "w" kaldırmak istediğimizi varsayalım . (Bu, 6. dizin konumunda.)

İlk önce: Bu konum için bir Dizin oluşturun. (Endeks endeksini iade ediyorum; gerekli değil).

let index:Index = hello.startIndex.advancedBy(6)

İkincisi: removeAtIndex() Çağrı ve ona bizim sadece yapımı endeksi geçmektedir.

let choppedChar:Character = hello.removeAtIndex(index)

print(hello) // baskılar merhaba ün ya (söz konusu karakteri döndürür dikkat edin)!

print(choppedChar) // baskılar