【发布时间】:2013-08-04 22:36:51
【问题描述】:
问题很简单,在某些语言中使用字符串删除变音符号。例如,使用“téléphone”会产生结果“telephone”。
在Java中我可以使用这样的方法:
public static String removeAccents(String str){
return Normalizer.normalize(str, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
它工作正常,但在 scala 中却不行……我尝试了如下代码:
val str = Normalizer.normalize("téléphone",Normalizer.Form.NFD)
val exp = "\\p{InCombiningDiacriticalMarks}+".r
exp.replaceAllIn(str,"")
它不起作用!
我想,我在 Scala 中使用 Regex 时遗漏了一些东西,因此我们将不胜感激。
【问题讨论】:
-
两者对我来说似乎都很好。只是从您的代码中猜测,也许您期望
replaceAllIn将修改您的str。这不会发生,因为 Java/Scala 中的字符串是不可变的。 -
@ghik 不,我没想到会这样,但我用 scala 得到的结果是:
-
@ghik Initialy 我在 Win8 平台上测试了这段代码,但它不起作用。现在我在Ubuntu上试了一下,效果很好,请问是什么原因?
-
@arussinov:检查两个操作系统中的源文件编码。在 Ubuntu 中它将是
utf8,在 Win8 中 - ?.