我在这里看到了很多与这个问题相关的问答。我使用了一些示例,但有些东西不起作用:
def input = 'now is thé timé'
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
上面的输出是
now-is-th-tim
如果我执行以下操作:
String input = 'now is th\u00E9 tim\u00E9'
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
我明白了
now-is-the-time
这就是我想要的。我什至尝试了以下方法:
def input = groovy.json.StringEscapeUtils.escapeJavaScript('now is thé timé')
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
但我明白了
now-is-th\u221A\u00A9-tim\u221A\u00A9
有什么建议吗?
更新:根据评论,我尝试了以下操作:
import java.text.Normalizer
def input = new File('file.txt').text
def results = Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "")
.replaceAll(/ +/, "-")
println results
file.txt 包含我放置在字符串中的文本。这正在按预期进行。因此,groovy 中字符串定义的编码发生了一些问题。
最佳答案
鉴于您的第二个代码片段有效,我强烈怀疑对于第一个代码片段,您在编辑器中使用的编码与您的 Groovy 解释器/编译器使用的编码不同。
换句话说,问题不在代码的第二行中,而是在第一行中。您并不是从您认为的输入文本开始。
关于java - 替换字符串中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20337644/