方法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中。但我不知道該怎麼做。也許我現在不明白正則表達式的一部分。特別是這些小組如何工作。
請幫忙!
你的正則表達式中只有1個組是用()括起來的部分,所以你不能訪問組2或3,因爲它不在那裏。只需在匹配循環中用matcher.group(1)替換matcher.group(1) – Regenschein
爲什麼不做SPLIT和REPLACE? – NeverHopeless