Используйте String.split () с несколькими разделителями - PullRequest
175 голосов
/ 13 мая 2011

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

AA.BB-CC-DD.zip ->

AA
BB
CC
DD
zip 

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

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

Ответы [ 14 ]

288 голосов
/ 13 мая 2011

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

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

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

48 голосов
/ 13 мая 2011

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

25 голосов
/ 18 декабря 2012

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

String[] tokens=pdfName.split("\\W");
12 голосов
/ 13 мая 2011

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

Iterable<String> tokens = Splitter.on(CharMatcher.anyOf("-.")).split(pdfName);
11 голосов
/ 13 мая 2011

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

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

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

3 голосов
/ 12 июня 2018

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

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

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

3 голосов
/ 19 апреля 2016

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

импорт org.apache.commons.lang3.StringUtils;

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

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

1 голос
/ 21 октября 2016

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

private void getId(String pdfName){
String[]tokens = pdfName.split("-|\\.");
}
0 голосов
/ 15 июля 2019

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

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

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

0 голосов
/ 25 июня 2019
String[] token=s.split("[.-]");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...