Метод getPolygonPoints() (смотри ниже) становится имя строки в качестве параметра, который выглядит примерно так:Regex - извлечь неограниченное количество хитов
points={{-100,100},{-120,60},{-80,60},{-100,100},{-100,100}}
Первое число обозначает х-координаты, второй для координаты y. Например, первая точка
x=-100
y=100
Второй пункт
x=-120
y=60
и так далее.
Теперь я хочу, чтобы извлечь точки строки и поместить их в ArrayList, который должен выглядеть в конце:
[-100, 100, -120, 60, -80, 60, -100, 100, -100, 100]
Особенность здесь в том, что количество точек данная строка изменяется и не всегда одинакова.
Я написал следующий код:
private ArrayList<Integer> getPolygonPoints(String name) {
// the regular expression
String regGroup = "[-]?[\\d]{1,3}";
// compile the regular expression into a pattern
Pattern regex = Pattern.compile("\\{(" + regGroup + ")");
// the mather
Matcher matcher;
ArrayList<Integer> points = new ArrayList<Integer>();
// matcher that will match the given input against the pattern
matcher = regex.matcher(name);
int i = 1;
while(matcher.find()) {
System.out.println(Integer.parseInt(matcher.group(i)));
i++;
}
return points;
}
Первая координата х извлекается правильно, но затем IndexOutOfBoundsException брошен. Я думаю, что это происходит, потому что группа 2 не определена. Я думаю, что сначала мне приходится подсчитывать точки, а затем перебирать это число. Внутри итерации я бы поставил значения int в ArrayList с помощью простого add(). Но я не знаю, как это сделать. Может быть, я не понимаю часть регулярного выражения на этом этапе. Особенно, как работают группы.
Пожалуйста, помогите!
В вашем регулярном выражении есть только 1 группа, которая является частью, заключенной в(), поэтому вы не можете получить доступ к группе 2 или 3, так как ее нет. просто замените matcher.group (i) на matcher.group (1) в вашем совпадающем цикле – Regenschein
Почему бы вам не сделать SPLIT и REPLACE? – NeverHopeless