Copy a string like Windows Explorer filenames

From Stack Overflow
Jump to: navigation, search
package org.ninjasoft.util;

import java.util.regex.*;

public class NameCopy {
    private static final Pattern pattern = Pattern.compile("^.* copy \\d+$");
    
    /**
     * Given a name, make a copy like in Windows Explorer.  The first copy
     * of "ninja" will be "ninja copy".  The next will be "ninja copy 1", the
     * next will be "ninja copy 2", etc.
     * @param source
     * @return
     */
    public static String copyName(String source) {
        // Handle case for "ninja copy"
        if (source.endsWith(" copy"))
            return source + " 1";
        // Handle case for "ninja"
        Matcher matcher = pattern.matcher(source);
        if (!matcher.matches())
            return source + " copy";
        // Handle case for "ninja copy 99"
        int pos = source.lastIndexOf(' ');
        int counter = 0;
        try{counter = Text.string2int(source.substring(pos+1));}catch(NumberFormatException e){}
        counter++;
        return source.substring(0, pos+1) + counter;
        
    }
    
    public static void main(String[] argv) {
        String name = "ninja";
        for (int i=0; i<20; i++) {
            name = copyName(name);
            System.out.println(name);
        }
    }
}

Personal tools