Используйте 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)
который использует полную строку в качестве разделителя
Лучше использовать что-то вроде этого:
s.split("[\\s\\-\\.\\'\\?\\,\\_\\@]+");
Добавили несколько других символов в качестве образца. Это самый безопасный способ использования, потому что способ .
а также '
лечится.
Попробуйте этот код:
var string = 'AA.BB-CC-DD.zip';
array = string.split(/[,.]/);
Вы также можете указать регулярное выражение в качестве аргумента в методе split().. см. Пример ниже....
private void getId(String pdfName){
String[]tokens = pdfName.split("-|\\.");
}
вы можете попробовать этот способ, так как 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];
...