Regex для удаления специальных символов в Java - PullRequest
1 голос
/ 25 октября 2019

У меня есть строка с парой специальных символов, и мне нужно удалить только несколько (~ и `). Я написал код ниже, но когда я печатаю разделенные строки, они также становятся пустыми со значениями.

String str = "ABC123-xyz`~`XYZ 1.7A";

String[] str1= varinaces.split("[\\~`]");

        for(int i=0; i< str1.length ; i++){
            System.out.println("str==="+ parts[i] );
        }

Вывод:

str === ABC123-xyz str === str=== str === XYZ 1.7A

почему здесь также печатаются пустые строки?

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

Это потому, что когда вы используете метод .split(), он возвращает массив строк из 4 элементов, показанных ниже:

String[4] { "ABC123-xyz", "", "", "XYZ 1.7A" }

А затем в цикле for вы печатаете все элементы этого массива. Вы можете использовать следующее, чтобы решить это:

for(int i=0; i< str1.length ; i++){
if(parts[i].compareTo("") > 0) {
    System.out.println("str==="+ parts[i] );
}           
}
0 голосов
/ 25 октября 2019

Метод split возвращает материал вокруг каждого совпадения регулярного выражения. Ваше регулярное выражение [~`] соответствует одному символу "~" или "` ". Части строки, разделенные соответствиями этому регулярному выражению, определяются следующим образом:

Строка "ABC123-xyz" возвращается, поскольку она отделяется от заданной строки в символе: "` ". Между этим символом и следующим соответствием, "~", находится пустая строка и так далее. Если вы хотите, чтобы оно совпадало с более, используйте [~`]+

0 голосов
/ 25 октября 2019

Вы делитесь на один специальный символ ... делитесь на 1 или больше :

String[] str1= varinaces.split("[~`]+");

Обратите внимание, что тильда ~ нене нужно убегать.

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