如果具有v
+數字+擴展名結尾的所有的字符串都被處理,使用圖案像v(\\d+)(?=\\.[^.]+$)
然後操縱Matcher#appendReplacement
方法內第1組的值:
String[] strs = { "Documento v1.docx", "Some_things.pdf", "Cosasv12.doc", "Document16.docx", "Nodoc"};
Pattern pat = Pattern.compile("v(\\d+)(?=\\.[^.]+$)");
for (String s: strs) {
StringBuffer result = new StringBuffer();
Matcher m = pat.matcher(s);
while (m.find()) {
int n = 1 + Integer.parseInt(m.group(1));
m.appendReplacement(result, "v" + n);
}
m.appendTail(result);
System.out.println(result.toString());
}
參見Java demo
輸出:
Documento v2.docx
Some_things.pdf
Cosasv13.doc
Document16.docx
Nodoc
圖案的詳細資料
v
- 一個v
(\d+)
- 第1組值:一個或多個數字
(?=\.[^.]+$)
- 這是遵循的字面.
然後1+字符除了字符串末尾的.
以外。
請解釋您爲什麼期望正則表達式起作用。什麼是''* *''要做什麼? – f1sh
尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve]。使用「編輯」鏈接來改善你的*問題* - 不要通過評論添加更多信息。謝謝! – GhostCat