1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| import java.util.*;
public class NewFileOnWin { public static String[] input; public static String[] output; public static Set<String> set = new HashSet<>(); public static Map<String, Integer> start = new HashMap<>();
public static void main(String[] args) { initInput(); solve(); for (String item : output) { System.out.println(item); } }
public static void initInput() { input = new String[]{ "1.txt", "1.txt", "2 (1).txt", "2 (1).txt", "3.txt", "3 (3).txt", "3.txt", "3.txt", "3.txt", "2 (1).txt" }; }
public static void solve() { int n = input.length; output = new String[n]; for (int i = 0; i < n; i++) { if (!set.contains(input[i])) { output[i] = input[i]; set.add(output[i]); } else { int pointIdx = input[i].indexOf('.'); int spaceIdx = input[i].indexOf(' '); if (pointIdx > 0 && input[i].charAt(pointIdx - 1) == ')') { String name = input[i].substring(0, spaceIdx); String suffix = input[i].substring(pointIdx, input[i].length()); String originalName = name + suffix; int k = start.getOrDefault(originalName, 2); while (true) { String tmp = name + " (" + k + ")" + suffix; if (!set.contains(tmp)) { output[i] = tmp; start.put(originalName, k + 1); set.add(output[i]); break; } else { k++; } } } else { int k = start.getOrDefault(input[i], 2); String name = input[i].substring(0, pointIdx); String suffix = input[i].substring(pointIdx, input[i].length()); while (true) { String tmp = name + " (" + k + ")" + suffix; if (!set.contains(tmp)) { output[i] = tmp; start.put(input[i], k + 1); set.add(output[i]); break; } else { k++; } } } } } } }
|