Regex 消除Scala中的变音符号

Regex 消除Scala中的变音符号,regex,scala,Regex,Scala,问题很简单,在某些语言中使用字符串可以删除变音符号。例如,使用“téléphone”生成结果“phone” 在Java中,我可以使用以下方法: public static String removeAccents(String str){ return Normalizer.normalize(str, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); } 它工作得很好,但在scala中

问题很简单,在某些语言中使用字符串可以删除变音符号。例如,使用“téléphone”生成结果“phone”

在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中使用正则表达式时,我遗漏了一些东西,因此我们非常感谢您的帮助。

我在使用Normalizer时遇到了同样的问题。以stripAccents的形式从中找到了一个解决方案,它可以从字符串中删除变音符号

 val str = stripAccents("téléphone")
 println(str)

这将产生“电话”。希望这对别人有帮助

您可以使用它,创建一个函数来返回
stripeAccents
的值

val spark=SparkBase.getSparkSession()

val sc=spark.sparkContext
import spark.implicits._

val str = stripAccents("téléphone")
println(str)

val str2 = stripAccents("SERNAQUE ARGÜELLO NORMA ELIZABETH")
println(str2)

case class Fruits(name: String, quantity: Int)
val sourceDS = Seq(("YÁBAR ARRIETA JENSON", 1), ("SERNAQUE ARGÜELLO NORMA ELIZABETH", 2)).toDF("text","num")

val check = udf((colValue: String) => {
  stripAccents(colValue)
})

sourceDS.select(col("text"),check(col("text"))).show(false)
->输出

+---------------------------------+---------------------------------+
|text                             |UDF(text)                        |
+---------------------------------+---------------------------------+
|YÁBAR ARRIETA JENSON             |YABAR ARRIETA JENSON             |
|SERNAQUE ARGÜELLO NORMA ELIZABETH|SERNAQUE ARGUELLO NORMA ELIZABETH|
+---------------------------------+---------------------------------+

这两个对我来说都很好。仅从代码中猜测,您可能希望
replaceAllIn
将修改您的
str
。这不会发生,因为Java/Scala中的字符串是不可变的。@ghik不,我不希望如此,但我用Scala得到的结果是:@ghik Initialy我在Win8平台上测试此代码,但它不起作用。现在我已经在Ubuntu上试用过了,效果很好,原因是什么?@arussinov:检查两个操作系统中的源文件编码。在Ubuntu中,它将是
utf8
,在Win8-?。