Мне нужно разбить строку на разделитель -
и .
. Ниже мой желаемый результат.
AA.BB-CC-DD.zip
→
AA
BB
CC
DD
zip
но мой следующий код не работает.
private void getId(String pdfName){
String[]tokens = pdfName.split("-\\.");
}
Мне нужно разбить строку на разделитель -
и .
. Ниже мой желаемый результат.
AA.BB-CC-DD.zip
→
AA
BB
CC
DD
zip
но мой следующий код не работает.
private void getId(String pdfName){
String[]tokens = pdfName.split("-\\.");
}
Я думаю, что вам нужно включить оператор регулярного выражения ИЛИ:
String[]tokens = pdfName.split("-|\\.");
Что у вас будет соответствовать:
[DASH, а затем DOT вместе] -.
не
[DASH или DOT любой из них] -
или .
Попробуйте это регулярное выражение "[-.]+"
. "+" Обрабатывает последовательные символы разделителя как один. Удалите плюс, если вы этого не хотите.
Вы можете использовать регулярное выражение "\ W". Это соответствует любому символу, отличному от слова. Требуемая строка:
String[] tokens=pdfName.split("\\W");
Используя Guava, вы можете сделать это:
Iterable<String> tokens = Splitter.on(CharMatcher.anyOf("-.")).split(pdfName);
Строка, которую вы даете split
, является строковой формой регулярного выражения, поэтому:
private void getId(String pdfName){
String[]tokens = pdfName.split("[\\-.]");
}
Это означает, что нужно разбить любой символ в []
(нам нужно избежать -
с обратным слэшем, потому что он является специальным внутри []
, и, конечно, нам нужно избежать обратного слэша, потому что это строка). (Наоборот, .
обычно является специальным, но не является специальным внутри []
.)
Я бы использовал Apache Commons:
import org.apache.commons.lang3.StringUtils;
private void getId(String pdfName){
String[] tokens = StringUtils.split(pdfName, "-.");
}
Он будет разбит на любой из указанных разделителей, в отличие от StringUtils.splitByWholeSeparator(str, separator)
, который использует полную строку в качестве разделителя
Для двухсимвольной последовательности в качестве разделителей "И" и "ИЛИ" это должно быть выполнено. Не забывайте обрезать при использовании.
String text ="ISTANBUL AND NEW YORK AND PARIS OR TOKYO AND MOSCOW";
String[] cities = text.split("AND|OR");
Результат: города = {"СТАМБУЛ", "НЬЮ-ЙОРК", "ПАРИЖ", "ТОКИО", "МОСКВА"}
Вы также можете указать регулярное выражение как аргумент в методе split(). Ниже приведен пример.
private void getId(String pdfName){
String[]tokens = pdfName.split("-|\\.");
}
Лучше использовать что-то вроде этого:
s.split("[\\s\\-\\.\\'\\?\\,\\_\\@]+");
Добавьте еще несколько символов в качестве образца. Это самый безопасный способ использования, поскольку обрабатываются методы .
и '
.
s.trim().split("[\\W]+")
должен работать.
Попробуйте этот код:
var string = 'AA.BB-CC-DD.zip';
array = string.split(/[,.]/);
String[] token=s.split("[.-]");
ИМХО, регулярные выражения иногда могут быть излишними, поскольку их может быть очень трудно отлаживать
// ES5 - Accepts either an array or a variable number of arguments
function sutSplit(string, delimiters) {
delimiters = (Array.isArray(delimiters) ? delimiters : Array.from(arguments).slice(1)).reverse();
const splits = string.split(delimiters.pop());
for (let delimiter of delimiters) {
for (let index = splits.length - 1; index >= 0; index--) {
const split = splits[index].split(delimiter);
if (split.length > 1) {
splits.splice(index, 1, ...split);
}
}
}
return splits;
}
Если мне нужна лучшая производительность, чем указанная выше, я полагаюсь на Webpack или LLVM + emscripten для оптимизации.
Надеюсь, полезно!
Если вы знаете, что sting всегда будет в одном формате, сначала разделите строку на основе .
и сохраните строку в первом индексе переменной. Затем разделите строку во втором индексе на основе -
и сохраните индексы 0, 1 и 2. Наконец, разделите индекс 2 предыдущего массива на основе .
, и вы должны были получить все соответствующие поля.
Обратитесь к следующему фрагменту:
String[] tmp = pdfName.split(".");
String val1 = tmp[0];
tmp = tmp[1].split("-");
String val2 = tmp[0];
...