java - 替换字符串中的特殊字符

标签 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'
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/

相关文章:

java - 默认情况下,如何使 netbeans 中的 swing 控件 protected 或公开?

gradle - 试图了解最简单的Gradle插件

gradle - 即使全新构建后,Gradle Zip任务也可以保持最新状态

php - 如何在 php 中的字符串中去除/删除所有空格**除了单词之间**?

javascript - 使用替换方法更改文本颜色

java - "Django Admin"类似于 Java 中的框架/应用程序

java - 在Java Socket中,DataInputStream没有完全读取数据

java - 如何在安全模块 Play 1.2.5 中硬编码用户名和密码

sql - Groovy DSL for Liquibase中的自定义SQL?

Laravel - 类似字符串替换的功能?