Разделение строки Java с помощью пользовательского соответствия регулярному выражению - PullRequest
1 голос
/ 01 апреля 2010

Я совершенно новичок в регулярных выражениях, поэтому мне нужна помощь.

Я компилирую под JDK 1.5

Взять эту строку в качестве примера, который я прочитал из стандартного ввода:

ab:Some string po:bubblegum

То, что я хотел бы сделать, это разделить на два символа и двоеточие. То есть после того, как строка разбита и помещена в строковый массив, это должны быть термины:

ab:Some string
po:bubblegum

У меня есть это регулярное выражение прямо сейчас:

String[] split = input.split("[..:]");

Это разделяет на точку с запятой; я хотел бы, чтобы он совпадал с двумя символами и точкой с запятой, но разделялся пробелом до того, как это началось Это вообще возможно?

Вот вывод из строкового массива:

ab
Some String po
bubblegum

Я также читал о Pattern.compile (). Это то, что я должен рассмотреть?

Ответы [ 2 ]

4 голосов
/ 01 апреля 2010
input.split(" (?=[A-Za-z]{2}:)")

? = Создает позитивный прогноз . Это означает, что двигатель смотрит вперед, чтобы увидеть, совпадает ли следующая часть, не потребляя эту часть. Если он совпадает, он разделяется на символ пробела. [A-Za-z] означает заглавную или строчную букву, а {2} указывает, что мы хотим, чтобы два символа соответствовали этому классу.

1 голос
/ 01 апреля 2010

Вы спрашивали о Pattern#compile(String pattern). Вам следует рассмотреть возможность его использования, если вы собираетесь часто использовать регулярное выражение, поскольку вышеупомянутый метод компилирует регулярное выражение во что-то, что быстро выполняется при использовании String#split(String regex), непосредственно всегда перекомпилирующим регулярное выражение.

...