Java 替换字符串中的特殊字符

Java 替换字符串中的特殊字符,java,groovy,str-replace,Java,Groovy,Str Replace,我在这里看到了很多与这个问题相关的问答。我用了几个例子,但有些东西不起作用: 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'

我在这里看到了很多与这个问题相关的问答。我用了几个例子,但有些东西不起作用:

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(/ +/, "-")
def input = groovy.json.StringEscapeUtils.escapeJavaScript('now is thé timé')
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
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
我明白了

这就是我想要的。我甚至尝试了以下方法:

String input = 'now is th\u00E9 tim\u00E9'
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
def input = groovy.json.StringEscapeUtils.escapeJavaScript('now is thé timé')
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
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
但我明白了

now-is-th\u221A\u00A9-tim\u221A\u00A9
有什么建议吗

更新:根据评论,我尝试了以下方法:

String input = 'now is th\u00E9 tim\u00E9'
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
def input = groovy.json.StringEscapeUtils.escapeJavaScript('now is thé timé')
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
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解释器/编译器使用的编码不同


换句话说,问题不在代码的第二行,而是在第一行。你不是从你认为你是的输入文本开始的。

他希望normalizer规范化
é
,但只有当他规范化
\u00E9
@nhgrif:这是é,表明这是一个编码问题。奇怪的是,您在groovyconsole中的第一个示例给了我
现在是时候了?@tim_yates我在groovy控制台和groovy web控制台中测试了它,得到了与您相同的结果。这是个好消息。但这并不能真正解决问题。像sublime这样的编辑器会导致不同于groovy的编码问题,这是没有道理的。我想这取决于sublime文本使用的编码方式。在终端窗口中运行
locale
是否有任何启示?(假设Linux/OSX)好吧,这一切都很好。我现在用升华来测试这个。解决办法是什么?如何同步编码?在VI中编写相同的代码会产生相同的结果,删除é。@Gregg:好吧,你需要知道你在Sublime中使用的是什么编码,以及它是如何运行Groovy的(或者你运行它的任何东西),然后看看你是否可以传入编码。