在 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
我在将外国名称转换为 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