繁体   English   中英

替换字符串中的特殊字符

[英]Replacing Special Characters in Strings

我在这里看到了很多与此问题相关的问答。 我已经使用了一些例子,但有些事情是行不通的:

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解释器/编译器使用的编码不同。

换句话说,问题不在代码的第二行 - 它在第一行。 您不是从您认为自己的输入文本开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM