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

Мне нужно разбить строку на разделитель - и .. Ниже мой желаемый результат.

AA.BB-CC-DD.zip

AA
BB
CC
DD
zip 

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

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

Ответ 1

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

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

Что у вас будет соответствовать:
[DASH, а затем DOT вместе] -.
не
[DASH или DOT любой из них] - или .

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

import org.apache.commons.lang3.StringUtils;

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

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

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

Ответ 10

s.trim().split("[\\W]+") 

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

Ответ 11

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

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

Ответ 12

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

Ответ 13

ИМХО, регулярные выражения иногда могут быть излишними, поскольку их может быть очень трудно отлаживать

// 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 для оптимизации.

Надеюсь, полезно!

Ответ 14

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

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

String[] tmp = pdfName.split(".");
String val1 = tmp[0];
tmp = tmp[1].split("-");
String val2 = tmp[0];
...