我有一个字符串,我想让网址友好。该字符串可能如下所示:A string with $trange characters!".
然后我想要转义所有错误的网址字符,最后得到a-string-with-trange-characters
在Groovy中实现此目的的最佳方法是什么?
答案 0 :(得分:4)
这有用吗?
string.replaceAll( /[^0-9a-zA-Z ]/, '' ).tr( ' ', '-' )
答案 1 :(得分:4)
在许多情况下,您可能希望不要完全删除非字母数字字符,而是首先分解它们:
import java.text.Normalizer
println Normalizer.normalize("String with \$strang\u00E9 chars", Normalizer.Form.NFD)
.replaceAll(/[^A-z0-9 ]/, "")
.replaceAll(/ +/, "-")
在上文中,\u00E9
是'é'。分解将其转换为字符“e”和组合标记“”。因此,当您应用转换时,结果是“奇怪的”而不是“strang - ”。
请注意,这并不是获取给定字符串的ASCII友好版本的全部内容......例如,它不会将“ß”转换为“ss”。我不知道在Java / Groovy中使用toUpperCase()的最佳方法。在初始字符串上使用toLowerCase()似乎有点'hacky')。