You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中特殊编码字符转换咨询:变音符号与欧元符号处理

嘿,这个需求在Scala里完全能搞定!我给你分享两种实用方案,既能处理变音符号转成普通字母,也能把欧元符号替换成"Euro",直接上干货:

1. 处理变音符号(ä/ö/ü → a/o/u)

方案一:用Java原生工具类(无额外依赖)

Scala可以直接调用Java的Normalizer类,通过Unicode标准化来剥离变音符号,这是最省心的原生方案,不用装任何库:

import java.text.Normalizer

def removeAccents(str: String): String = {
  Normalizer.normalize(str, Normalizer.Form.NFD)
    // 匹配所有组合变音符号并移除
    .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
}

原理是把带变音的字符(比如ö)分解成基础字符o加上单独的变音符号Unicode码,然后过滤掉这些变音符号,就得到了纯字母。

方案二:用第三方库(更简洁)

如果觉得原生写法有点啰嗦,可以用Apache Commons Lang3的StringUtils.stripAccents方法,一行搞定:
首先在你的SBT配置里加依赖:

libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.14.0"

然后代码里直接用:

import org.apache.commons.lang3.StringUtils

val withoutAccents = StringUtils.stripAccents(str)

这个方法会自动处理所有带变音的字符,不止ä/ö/ü,其他语言的变音符号也能搞定。

2. 处理欧元符号(€ → "Euro")

这个就简单多了,直接用Scala字符串的replace或者replaceAll方法就行,甚至可以根据上下文调整:

// 直接替换所有€为"Euro "(加空格避免和后面的数字连在一起)
val withEuroReplaced = str.replace("€", "Euro ")

如果需要更灵活的匹配(比如只替换独立的€,或者处理特殊格式),可以用正则,比如:

// 匹配€后面紧跟数字的情况,替换成"Euro "
val withEuroReplaced = str.replaceAll("€(?=\\d)", "Euro ")
完整示例

把两个逻辑结合起来,处理你给的示例字符串:

import java.text.Normalizer

def normalizeText(str: String): String = {
  // 第一步:移除变音符号
  val withoutAccents = Normalizer.normalize(str, Normalizer.Form.NFD)
    .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
  // 第二步:替换欧元符号
  withoutAccents.replace("€", "Euro ")
}

// 测试你的示例字符串
val originalStr = "Köln and München are great cities. The average bus ticket costs €4.5"
val result = normalizeText(originalStr)
// 输出:"Koln and Munchen are great cities. The average bus ticket costs Euro 4.5"
额外小提示

如果还有其他特殊符号需要处理(比如其他货币符号、特殊字符),可以扩展这个逻辑——要么用正则批量替换,要么用第三方库(比如Apache Commons Text)的工具类,都能轻松搞定。

内容的提问来源于stack exchange,提问作者jOasis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:51:23