2013-01-24 16 views
11

Questo è un approccio accettabile per la rimozione di più tipi di caratteri da una stringa o esiste un modo migliore (più efficiente)? Il "ilr".contains(_) bit sembra un po 'come barare considerando che sarà fatto per ogni singolo personaggio, ma poi di nuovo, forse questa è la strada giusta. C'è un modo più veloce o più efficiente per farlo?Rimozione di più tipi di caratteri da una stringa

val sentence = "Twinkle twinkle little star, oh I wander what you are" 

val words = sentence.filter(!"ilr".contains(_)) 

// Result: "Twnke twnke tte sta, oh I wande what you ae" 

risposta

25

Non ci sarebbe alcuna differenza significativa, poiché non v'è solo 3 caratteri da rimuovere e non così grande stringa per filtrare, ma si può prendere in considerazione di utilizzare Set per questo scopo. Per esempio.

val toRemove = "ilr".toSet 
val words = sentence.filterNot(toRemove) 
25

mi basta usare Java buon vecchio replaceAll (ci vuole un regexp):

"Twinkle twinkle little star, oh I wander what you are" replaceAll ("[ilr]", "") 
// res0: String = Twnke twnke tte sta, oh I wande what you ae 

A differenza di lavorare con char s (come in filtrare una Seq[Char]), utilizzando le espressioni regolari dovrebbero essere Sicuro per Unicode anche se lavori con punti codice al di fuori del piano multilingue di base. "There Ain't No Such Thing As Plain Text."

+1

+1 Grazie, continuo a dimenticare quanto è vicino Java. – Jack

+0

Potrebbe esserci un punto in "all'esterno del BMP". Ma se ti interessa, è meglio che ti sforzi di testare: non c'è quasi nulla di simile al software Java sicuro per BMP (http://stackoverflow.com/a/2533118/53974). Fortunatamente, l'SDK è apparentemente un'eccezione, se usi le API giuste - e le espressioni regolari sono tra quelle benedette. http://www.oracle.com/us/technologies/java/supplementary-142654.html – Blaisorblade

Problemi correlati