有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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替换字符


共 (4) 个答案

  1. # 1 楼答案

    你可以这样做:

    fileName.replaceAll("\u2212|\u002D|\u05BE|\u2011|\u2012|\u2013|\u2014|\u2015|\u207B|\u208B|\u2212|\uFE58|\uFE63|\uFF0D", "\u2010");
    
  2. # 2 楼答案

    file.getFilename()上调用replaceAll()方法,如下所示:

    file.getFilename().replaceAll(FILE_NAME.toString() ,"\\u2010");
    
  3. # 3 楼答案

    使用<TargetString>.replaceAll(<pattern>, <replacement>)(参见:Java 8 API: String

    在您的情况下,这将是:file.getFilename().replaceAll(FILE_NAME.toString(), "\u2010")

  4. # 4 楼答案

    它应该是这样的:

    name = name.replaceAll("[\u2212\u002D\u00AD\u05BE"
            + "\u2011\u2012\u2013\u2014\u2015\u207B\u208B\u2212\uFE58\uFE63\uFF0D]", "\u2010");
    

    这里的\u2212是java字符,带有4位十六进制UTF-16值。 没有魔法,\u0063c一样,就像public \u0063lass X { }

    用于dash like Unicode的资源