Java: разделить строку с меньшим количеством кода в методе - PullRequest
0 голосов
/ 27 апреля 2019

Теперь у меня есть некоторые входные данные, такие как этот шаблон:

org.apache.commons.fileupload, версия = 1.2.1, org.apache.commons.fileuplo> ad.disk, версия = 3.00,0, org.apache.commons.fileupload.servlet, версия = 1,2> 0,1, org.apache.commons.fileupload.util, версия = 1.2.1, org.apache.commons.> IO, версия 1.4.0 =, org.apache.commons.io.filefilter, версия = 1.4.0, org.apa> che.commons.io.output, версия = 1.4.0, org.apache.felix.inventory, версия => 1.0.0,атрибуты org.apache.felix.webconsole, версия = 3.3.0, org.apache.felix.webcon> sole.bundleinfo, версия = 1.0.0, org.apache.felix.webconsole.i18n, версия => 1.0.0][0]: org.apache.commons.fileupload

И мне нужно разделить его и сохранить в таблице или списке следующим образом:

где: (Пример)

 String[] attributes = inputs.split();
 attributes[0]: org.apache.commons.fileupload,version=1.2.0
 attributes[1]: org.apache.commons.fileupload.disk,version=3.0.0

  .....

Я пытался с некоторым кодом:

attributes = input.split("((,version=)*([0-9],))");
but i got: 
attributes[0]: org.apache.commons.fileupload,version=1.2.
attributes[1]: org.apache.commons.fileupload.disk,version=3.0.

Где всегда пропускаются последние цифры версии = 1.2.X!

Я надеюсь, что кто-то может помочья

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Я думаю, что для этой конкретной трассировки стека, лучший шаблон для разбиения был бы такой:

,(?=(?:org|com)\\.)

То есть, разделение на последнюю запятую в каждой строке трассировки стека.

String[] parts = text.split(",(?=(?:org|com)\\.)");
for (String part : parts) {
    System.out.println(part);
}

Вывод:

org.apache.commons.fileupload,version=1.2.1
org.apache.commons.fileupload.disk,version=3.0.0
org.apache.commons.fileupload.servlet,version=1.2.1
org.apache.commons.fileupload.util,version=1.2.1
org.apache.commons.io,version=1.4.0
org.apache.commons.io.filefilter,version=1.4.0
org.apache.commons.io.output,version=1.4.0
org.apache.felix.inventory,version=>1.0.0
org.apache.felix.webconsole,version=3.3.0
org.apache.felix.webconsole.bundleinfo,version=1.0.0
org.apache.felix.webconsole.i18n,version=>1.0.0] attributes[0]:org.apache.commons.fileupload

Что касается того, что происходит, когда трассировка стека упоминает какой-то другой пакет, мы можем добавить другой префикс к чередованию.

0 голосов
/ 27 апреля 2019

Попробуйте использовать регулярное выражение ниже, хотя вы уже закрыли его:

(([a-zA-Z.0-9]*,version=>?[0-9.]*)|[a-zA-Z.0-9]*),?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...