Преобразование символов в Java - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь сделать текстовый конвертер для имен файлов с регулярным выражением, в этом тексте есть несколько разных типов тире и дефисов, минус и т. Д. И т. Д.Я хочу преобразовать их все в простой дефис.

Есть несколько типов различных тире, и их юникоды здесь:

u2212 u002D u05BE u2011 u2012 u2013 u2014 u2015 u207B u208B u2212 uFE58 uFE63 uFF0D 

, если символ является одним из этих юникодов, тоЯ хочу преобразовать его в простой дефис, который равен 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 ]

0 голосов
/ 03 января 2019

Это должно выглядеть следующим образом:

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

Здесь \u2212 в java-символах с шестнадцатеричными значениями UTF-16 из 4 цифр.Магии нет, \u0063 - это то же самое, что и c, как в public \u0063lass X { }.

Ресурс для , как Unicode .

0 голосов
/ 03 января 2019

Вы можете сделать это так:

fileName.replaceAll("\u2212|\u002D|\u05BE|\u2011|\u2012|\u2013|\u2014|\u2015|\u207B|\u208B|\u2212|\uFE58|\uFE63|\uFF0D", "\u2010");
0 голосов
/ 03 января 2019

Вызовите метод replaceAll() для file.getFilename(), как показано ниже:

file.getFilename().replaceAll(FILE_NAME.toString() ,"\\u2010");
0 голосов
/ 03 января 2019

Использование <TargetString>.replaceAll(<pattern>, <replacement>) (См .: Java 8 API: String )

В вашем случае это будет: file.getFilename().replaceAll(FILE_NAME.toString(), "\u2010")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...