String myString1 = "22223 2342 1 98 333 3 665"
String myString2 = "22323 3 222 34 33 1 98"
我只想提取有1位,那麼空間的價值,那麼只有兩個數字。
private static final Pattern p3DigitsGap = Pattern.compile(".*\\b\\d\\s\\d{2}\\b.*");
在上述兩個串,我想找提取「1 98」我不能只用空白任一側分割的情況下,該圖案是在所述字符串的末尾。
Matcher matcher = p3DigitsGap.matcher(myString1);
if (matcher.find()) {
Log.i("Matcher found");
while (matcher.find() == true) {
Log.i("Matcher is true");
String extract = matcher.group(1);
Log.d("extract: " + extract);
}
}
如果我刪除while循環,則字符串提取不會填充並引發超出邊界異常。我在while循環中添加了並且matcher.find()不等於true。
我想換我的模式:
Pattern p3DigitsGap = Pattern.compile("[^0-9a-z]\\d\\s\\d{2}[^0-9a-z]");
我認爲使用* \\ B的可能會造成問題,但我得到了相同的結果。
請有人幫助我瞭解我哪裏出錯了。
在此先感謝。
回答編輯:我標記了Reimeus的正確答案,因爲它通過使用上述正則表達式的組來工作。另請參閱Tim Pietzcker提供的替代解決方案,以改進我的原始正則表達式。
非常感謝!如果我稍微調整你的答案,使得括號包圍(\\ d \\ s \\ d {2}),我會得到正確的輸出「1 98」。是對的嗎? – brandall
是的,你是對的,我的不好,忘記了這個空間和2位數,已經更新了正確的答案 – Reimeus
@andjav在你的輸入是''1 98 333 3 665''或'22223 2342 1 98 「',看我的答案! – turtledove