在groovy拆分收集中包含外部字符



我在将外国名称转换为大写/小写时遇到问题…它似乎省略了外国字符。知道怎么解吗?

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类的JavaDocs),不包括É。这就解释了为什么在这两种情况下,这个字符都被用作分隔符。

可以用空格或空格分隔:

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

以上都返回"Sébastien Dol De Bretagne"

另一个选择:使用replaceAll替换所有非空格字符。例如

String str = "SÉBASTIEN DOL DE BRETAGNE";
println str.replaceAll(/S+/, { it.toLowerCase().capitalize() })
// → 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'

你可以在这里查找不同的locale

最新更新