Java中的字符转换正则表达式
我正在尝试使用正则表达式为文件名制作一个文本转换器,在本文中有一些不同的破折号类型和连字符类型减号等。我想将它们全部转换为一个简单的连字符
有几种不同类型的破折号,其Unicode如下所示:
u2212 u002D u05BE u2011 u2012 u2013 u2014 u2015 u207B u208B u2212 uFE58 uFE63 uFF0D
如果一个字符是这些Unicode中的一个,那么我想将其转换为简单连字符,即带有regex的u2010
如何使用java将此字符转换为正则表达式
起初,我检查文件名是否有效,如下所示:
private static final Pattern FILE_NAME = Pattern.compile("^[a-zA-Z0-9_\\u2212\\u002D\\u00AD\\u05BE\\u2010\\u2011\\u2012\\u2013\\u2014\\u2015\\u207B\\u208B\\u2212\\uFE58\\uFE63\\uFF0D\\.\\s\\,\\[\\]()\\{\\}]+$");
if (!FILE_NAME.matcher(file.getFilename()).matches()) {
throw new FileValidationException(FILE_NAME_INVALID);
}
但现在我不想验证它,我只想用连字符u2010替换字符
# 1 楼答案
你可以这样做:
# 2 楼答案
在
file.getFilename()
上调用replaceAll()
方法,如下所示:# 3 楼答案
使用
<TargetString>.replaceAll(<pattern>, <replacement>)
(参见:Java 8 API: String)在您的情况下,这将是:
file.getFilename().replaceAll(FILE_NAME.toString(), "\u2010")
# 4 楼答案
它应该是这样的:
这里的
\u2212
是java字符,带有4位十六进制UTF-16值。 没有魔法,\u0063
和c
一样,就像public \u0063lass X { }
用于dash like Unicode的资源