2017-09-15 46 views
1

我有一個字符串加+ N一些字符串ID與「V +數字」結尾的名字

數組
Value[0] = "Documento v1.docx"; 
Value[1] = "Some_things.pdf"; 
Value[2] = "Cosasv12.doc"; 
Value[3] = "Document16.docx"; 
Value[4] = "Nodoc"; 

我想更改文檔的名稱,並添加+1的版本每份文件。但只有以v {number}(v1,v12等)結尾的文檔字符串。

我用正則表達式[v]+a*^但只有我獲得了「V」,而不是數量「V」之後

+0

請解釋您爲什麼期望正則表達式起作用。什麼是''* *''要做什麼? – f1sh

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve]。使用「編輯」鏈接來改善你的*問題* - 不要通過評論添加更多信息。謝謝! – GhostCat

回答

1

如果具有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+字符除了字符串末尾的.以外。
1

正則表達式v\d+應符合在信v,隨後數(請注意,您可能在將其分配給字符串時,需要將其編寫爲v\\d+)。正則表達式的進一步增強取決於代碼的外觀。您可能想要打包在一個捕獲組中,如(v\d+),甚至是(v(\d+))

快速搜索的第一個參考是 https://docs.oracle.com/javase/tutorial/essential/regex/, 這應該是一個很好的起點。

0

嘗試使用正則表達式是這樣的:

([v])([1-9]{1,3})(\.) 

通知,我已經包含在順序點有較少的「衝突」,最大的999個版本({1,3})。

此外,我已經使用了3個不同的組,以便您可以輕鬆檢索版本號並增加字符串。

實施例:

String regex = ; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(time); 
if(matcher.matches()){ 
    int version = matcher.group(2); // don't remember if is 0 or 1 based 
} 
相關問題