package org.jabref.logic.util.io; import java.util.Arrays; /** * This class is based on http://stackoverflow.com/a/5626340/873282 * * Replaces illegal characters in given file paths. */ public class FileNameCleaner { /** * MUST ALWAYS BE A SORTED ARRAY because it is used in a binary search */ // @formatter:off private static final int[] ILLEGAL_CHARS = { 0, 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, 34, 42, 47, 58, 60, 62, 63, 92, 124 }; // @formatter:on private FileNameCleaner() { } /** * Replaces illegal characters in given fileName by '_' * * @param badFileName the fileName to clean * @return a clean filename */ public static String cleanFileName(String badFileName) { StringBuilder cleanName = new StringBuilder(badFileName.length()); for (int i = 0; i < badFileName.length(); i++) { char c = badFileName.charAt(i); if (FileNameCleaner.isCharLegal(c)) { cleanName.append(c); } else { cleanName.append('_'); } } return cleanName.toString().trim(); } private static boolean isCharLegal(char c) { return Arrays.binarySearch(FileNameCleaner.ILLEGAL_CHARS, c) < 0; } }