简体   繁体   中英

add +n to the name of some Strings id ends with “v + number”

I have an array of Strings

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

I want to change the name of the document and add +1 to the version of every document. But only the Strings of documents that ends with v{number} (v1, v12, etc).

I used the regex [v]+a*^ but only i obtain the "v" and not the number after the "v"

The Regex v\\d+ should match on the letter v , followed by a number (please note that you may need to write it as v\\\\d+ when assigning it to a String). Further enhancement of the Regex depends in what your code looks like. You may want to to wrap in a Capturing Group like (v\\d+) , or even (v(\\d+)) .

The first reference a quick search turns up is https://docs.oracle.com/javase/tutorial/essential/regex/ , which should be a good starting point.

If all your strings ending with v + digits + extension are to be processed, use a pattern like v(\\\\d+)(?=\\\\.[^.]+$) and then manipulate the value of Group 1 inside the Matcher#appendReplacement method:

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());
}

See the Java demo

Output:

Documento v2.docx
Some_things.pdf
Cosasv13.doc
Document16.docx
Nodoc

Pattern details

  • v - a v
  • (\\d+) - Group 1 value: one or more digits
  • (?=\\.[^.]+$) - that are followed with a literal . and then 1+ chars other than . up to the end of the string.

Try a regex like this:

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

notice that I've already included the point in order to have less "collisions" and a maximum of 999 versions({1,3}).

Further more I've used 3 different groups so that you can easily retrieve the version number increase it and replace the string.

Example:

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
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM