在 groovy split collect 中包含外来字符

Include foreign characters in groovy split collect

我在将外国名称转换为 upper/lower 大小写时遇到问题... 似乎省略了外来字符。 知道我该如何解决这个问题吗?

String str = "SÉBASTIEN DOL DE BRETAGNE";
return str.split(/[^\w]/).collect { it.toLowerCase().capitalize() }.join(" ");

Current output: S Bastien Dol De Bretagne
Desired output: Sébastien Dol De Bretagne

我想让它与所有外国字符(瑞典语、法语等)一起使用,但我不知所措:-)

你在非单词字符上分裂,这就是问题所在。 \w[a-zA-Z_0-9](见Pattern class's JavaDocs),不包括É。这就解释了为什么这个字符在任何一种情况下都被用作分隔符。

您可以用空格或空格分隔:

//any version of these, specifying the delimiter
s.split(/ +/).collect { it.toLowerCase().capitalize() }.join(" ")
s.split(/\s+/).collect { it.toLowerCase().capitalize() }.join(" ")

以上两个return"Sébastien Dol De Bretagne"

您可以使用 Apache Commons Lang3 库轻松完成此操作:

import org.apache.commons.lang3.StringUtils
import org.apache.commons.lang3.text.WordUtils

String str = "SÉBASTIEN DOL DE BRETAGNE"

assert WordUtils.capitalizeFully(StringUtils.lowerCase(str, Locale.ENGLISH)) == 'Sébastien Dol De Bretagne'

您可以查找不同的语言环境here

另一种选择:使用replaceAll替换所有非空格 人物。例如

String str = "SÉBASTIEN DOL DE BRETAGNE";
println str.replaceAll(/\S+/, { it.toLowerCase().capitalize() })
// → Sébastien Dol De Bretagne