Ho visto molti metodi per rimuovere l'ultimo carattere da una stringa. C'è comunque un modo per rimuovere qualsiasi vecchio carattere basato sul suo indice?Rimuovi nesimo carattere dalla stringa
risposta
Mentre gli indici di stringa non sono ad accesso casuale e non sono numeri, è possibile li avanzare di un numero al fine di accedere al carattere n-esimo:
var s = "Hello, I must be going"
s.removeAtIndex(advance(s.startIndex, 5))
println(s) // prints "Hello I must be going"
Naturalmente, si dovrebbe sempre verificare la stringa è almeno 5 di lunghezza prima di fare questo!
edit: come sottolinea @MartinR, è possibile utilizzare la versione con il fine-index di anticipo per evitare il rischio di correre oltre la fine:
let index = advance(s.startIndex, 5, s.endIndex)
if index != s.endIndex { s.removeAtIndex(index) }
Come sempre, optional sono tuo amico:
// 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)
}
var hello = "hello world!"
Diciamo che vogliamo rimuovere la "w". (È al sesto posto dell'indice.)
Primo: creare un indice per quella posizione. (Sto rendendo il tipo di ritorno Index esplicito, non è obbligatorio).
let index:Index = hello.startIndex.advancedBy(6)
Secondo: Call removeAtIndex() e passarlo nostro indice appena fatta. (Si noti che restituisce il personaggio in questione)
let choppedChar:Character = hello.removeAtIndex(index)
print(hello)
// stampa ciao ondo!
print(choppedChar)
// stampa w
Invece di controllare la lunghezza * * in anticipo, si può utilizzare alternativamente 'lasciare index = anticipo (s.startIndex, 5, s.endIndex); if index! = s.endIndex {s.removeAtIndex (index)} '. –
Ottimo punto. In un certo senso sarebbe bello se questo restituisse un optional in modo simile a 'find', ma suppongo che ciò significherebbe che sarebbe meno utile nei casi in cui' end' è un indice legit che vuoi includere piuttosto che la fine di -index sentinella. –
Sì. [Here] (http://stackoverflow.com/a/26691258/1187415) è un semplice esempio in cui viene utilizzato il fatto che questo metodo 'advance()' restituisce un indice valido (non opzionale). –