2013-01-24 17 views
11

Bu, birden çok karakter türünü bir dizgeden kaldırmak için kabul edilebilir bir yaklaşım mıdır, yoksa daha iyi (daha verimli bir yol) var mı? "ilr".contains(_) bit, her karakter için yapılacağını düşünerek biraz hile gibi hissediyor, ama sonra tekrar, belki de bu doğru yoldur. Bunu yapmanın daha hızlı mı yoksa daha verimli bir yolu var mı? Sadece 3 karakter filtre kaldırmak ve hiçbir kadar büyük bir dize için olduğundanBir dizeden birden çok karakter türünü kaldırma

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" 

cevap

25

, anlamlı fark yoktu olurdu, ancak bu amaç için Set kullanmayı düşünebilirsiniz. Örneğin.

val toRemove = "ilr".toSet 
val words = sentence.filterNot(toRemove) 
25
Sadece kullanmayı tercih ediyorum

Java en iyi eski replaceAll (bir Regexp'i sürer):

olmalıdır normal ifadeler kullanarak, (a Seq[Char] filtreleme gibi) char s ile çalışan aksine
"Twinkle twinkle little star, oh I wander what you are" replaceAll ("[ilr]", "") 
// res0: String = Twnke twnke tte sta, oh I wande what you ae 

Unicode-safe, basit çok dilli düzlem dışında kod noktaları ile çalışıyor olsanız bile. "There Ain't No Such Thing As Plain Text."

+1

+1 Teşekkürler, Java'nın ne kadar yakın olduğunu unutmaya devam ediyorum. – Jack

+0

"BMP'nin dışında" üzerinde bir noktaya sahip olabilirsiniz. Ama eğer ilgilenirseniz, yoğun bir şekilde test yaptırırsınız - neredeyse * BMP-güvenli Java yazılımı gibi bir şey yoktur (http://stackoverflow.com/a/2533118/53974). Neyse ki, doğru API'ları kullanırsanız SDK görünüşe göre bir istisnadır - ve düzenli ifadeler kutsanmış olanlar arasındadır. http://www.oracle.com/us/technologies/java/supplementary-142654.html – Blaisorblade

İlgili konular