getPolygonPoints() 方法(见下文)变成了一个字符串名称作为参数,看起来像这样:
points={{-100,100},{-120,60},{-80,60},{-100,100},{-100,100}}
第一个数字代表 x 坐标,第二个数字代表 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;
}
第一个 x 坐标被正确提取,但随后引发 IndexOutOfBoundsException。我认为会发生这种情况,因为未定义第 2 组。我认为首先我必须计算点数,然后迭代这个数字。在迭代内部,我将使用简单的 add() 将 int 值放入 ArrayList 中。但我不知道该怎么做。也许我现在不理解正则表达式部分。尤其是小组的工作方式。
请帮忙!