Используйте String.split() с несколькими разделителями

Мне нужно разделить строку строки по разделителю - а также ., Ниже приведены мои желаемые результаты.

AA.BB-CC-DD.zip ->

AA
BB
CC
DD
zip 

но мой следующий код не работает.

private void getId(String pdfName){
    String[]tokens = pdfName.split("-\\.");
}

15 ответов

Решение

Я думаю, что вам нужно включить оператор регулярного выражения ИЛИ:

String[]tokens = pdfName.split("-|\\.");

То, что у вас будет соответствовать "-." не "-" или "."

Попробуйте это регулярное выражение "[-.]+", Знак + обрабатывает последовательные символы-разделители как единое целое. Удалить плюс, если вы этого не хотите.

Вы можете использовать регулярное выражение "\W". Это соответствует любому не-словесному символу. Необходимая строка будет:

String[] tokens=pdfName.split("\\W");

Строка, которую вы даете split это строковая форма регулярного выражения, поэтому:

private void getId(String pdfName){
    String[]tokens = pdfName.split("[\\-.]");
}

Это значит разделить на любого персонажа в [] (мы должны сбежать - с обратной косой чертой, потому что это особенное внутри []; и, конечно, мы должны избежать обратной косой черты, потому что это строка). (Наоборот, . обычно особенный, но не особенный внутри [].)

Используя Guava, вы можете сделать это:

Iterable<String> tokens = Splitter.on(CharMatcher.anyOf("-.")).split(pdfName);

Для двух последовательностей символов в качестве разделителей "И" и "ИЛИ" это должно работать. Не забудьте обрезать во время использования.

 String text ="ISTANBUL AND NEW YORK AND PARIS OR TOKYO AND MOSCOW";
 String[] cities = text.split("AND|OR"); 

Результат: города = {"СТАМБУЛ", "НЬЮ-ЙОРК", "ПАРИЖ", "ТОКИО", "МОСКВА"}

pdfName.split("[.-]+");

  • [.-] -> любой из . или же - может использоваться как разделитель

  • + Знак означает, что если вышеупомянутые разделители встречаются последовательно, мы должны рассматривать их как один.

Я бы использовал Apache Commons:

Импортировать org.apache.commons.lang3.StringUtils;

private void getId(String pdfName){
    String[] tokens = StringUtils.split(pdfName, "-.");
}

Он будет разделен на любой из указанных разделителей, в отличие от StringUtils.splitByWholeSeparator(str, separator) который использует полную строку в качестве разделителя

String[] token=s.split("[.-]");

Лучше использовать что-то вроде этого:

s.split("[\\s\\-\\.\\'\\?\\,\\_\\@]+");

Добавили несколько других символов в качестве образца. Это самый безопасный способ использования, потому что способ . а также ' лечится.

Попробуйте этот код:

var string = 'AA.BB-CC-DD.zip';
array = string.split(/[,.]/);

Вы также можете указать регулярное выражение в качестве аргумента в методе split().. см. Пример ниже....

private void getId(String pdfName){
String[]tokens = pdfName.split("-|\\.");
}
s.trim().split("[\\W]+") 

должно сработать.

вы можете попробовать этот способ, так как split принимает varargs, поэтому мы можем передавать несколько параметров в качестве разделителей

       String[]tokens = pdfName.split("-",".");

вы можете передать столько параметров, сколько хотите.

Если вы знаете, что строка всегда будет в одном и том же формате, сначала разбейте строку на основе . и сохранить строку с первым индексом в переменной. Затем разбить строку во втором индексе на основе - и хранить индексы 0, 1 и 2. Наконец, разделить индекс 2 предыдущего массива на основе . и вы должны были получить все соответствующие поля.

Обратитесь к следующему фрагменту:

String[] tmp = pdfName.split(".");
String val1 = tmp[0];
tmp = tmp[1].split("-");
String val2 = tmp[0];
...
Другие вопросы по тегам