Возникли проблемы при использовании регулярных выражений с методом split в Java - PullRequest
2 голосов
/ 11 июня 2011

У меня есть список строк, которые мне нужно проанализировать по имени и версии, например, некоторые строки выглядят так:

Имя приложения 1.2.5
Имя приложения 7.8.b
Имя приложения 7.0

Я хочу иметь два списка строк, один с именем приложения и один с номером версии, поэтому один список:

Имя приложения
Имя приложения
ПриложениеИмя

Тогда другой список будет

1.2.5
7.8.b
3.0

Я попытался просто использовать пробел для разделения строк,но было бы проще, если бы имя всегда было в индексе 0, а версия всегда в индексе 1. Поэтому я попытался "\\ d" (разделить на цифры), однако это не сработало так, как я думал.Буду признателен за любую помощь, и заранее спасибо

Ответы [ 2 ]

5 голосов
/ 11 июня 2011

Сплит здесь не совсем уместен. Попробуйте вместо этого использовать средство сравнения и используйте метод group, чтобы получить имя и версию приложения.

Pattern p = Pattern.compile("^(\\D*[^\\d\\s])\\s*(\\d.*)", Pattern.DOT_ALL);
Matcher m = p.matcher(myString);
if (m.find()) {
  String appName = m.group(1);
  String versionNumber = m.group(2);
  ...
}

Чтобы понять, как работает регулярное выражение, взгляните на следующее:

^

означает начать сопоставление в начале

(

запускает группу 1, которая будет содержать название версии

\\D*

который начинается с любого количества не цифр

[^\\d\\s]

и заканчивается чем-то, что не является ни цифрой, ни пробелом.

)

конец группы 1

\\s*

, который может быть отделен от номера версии нулем или несколькими пробелами.

(

Группа 2 содержит номер версии.

\\d

начинается с цифры

.*

и продолжает оставшуюся часть ввода.

)

Конец.

0 голосов
/ 11 июня 2011

Попробуйте с " (?=\\d)"

, то есть пробелом, за которым следует цифра, которая не потребляется (через положительный прогноз нулевой ширины)

...