java - 在 Java 中清理文件名

标签 java string mp3 filenames file-rename

我想编写一个脚本来清理我的 .mp3 文件。 我能够编写几行来更改名称,但我想编写一个自动脚本,在更改下一个名称时删除所有不需要的字符 $%_!?7 等格式艺术家空间破折号歌曲

    File file = new File("C://Users//nikita//Desktop//$%#Artis8t_-_35&Son5g.mp3");
    String Original = file.toString();
    String New = "Code to change 'Original' to 'Artist - Song'";
    File file2 = new File("C://Users//nikita//Desktop//" + New + ".mp3");
    file.renameTo(file2);

我觉得我应该制作一个包含所有可能字符的列表,然后通过该列表运行字符串并删除所有列出的字符,但我不知道该怎么做。

String test = "$%$#Arti56st_-_54^So65ng.mp3";

编辑1:

当我尝试使用方法remove时,它仍然不会更改名称。

String test = "$%$#Arti56st_-_54^So65ng.mp3";
System.out.println("Original: " + test);
test.replace( "[0-9]%#&\\$", "");
System.out.println("New:      " + test);

上面的代码返回以下输出

Original: $%$#Arti56st_-_54^So65ng.mp3
New:      $%$#Arti56st_-_54^So65ng.mp3

最佳答案

我建议这样:

public static String santizeFilename(String original){
    Pattern p = Pattern.compile("(.*)-(.*)\\.mp3");
    Matcher m = p.matcher(original);

    if (m.matches()){
        String artist = m.group(1).replaceAll("[^a-zA-Z ]", "");
        String song = m.group(2).replaceAll("[^a-zA-Z ]", "");

        return String.format("%s - %s", artist, song);
    }
    else {
        throw new IllegalArgumentException("Failed to match filename : "+original);
    }

}

(编辑 - 更改白名单正则表达式以排除数字和下划线)

特别是两点 - 在清理字符串时,最好将允许的字符列入白名单,而不是将要排除的字符列入黑名单,这样您以后就不会因边缘情况而感到惊讶。 (您可能需要比我在这里使用的限制更少的白名单,但它很容易改变) 处理文件名与预期模式不匹配的情况也是一个好主意。如果您的代码遇到 MP3 以外的其他内容,您希望它如何响应?这里我遇到了一个异常,因此调用代码可以捕获并适本地处理该异常。

关于java - 在 Java 中清理文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31277558/

相关文章:

android - 1 MB .txt 文件中有多少个字符?

.net - 如何使用NAudio从cryptoStream播放mp3?

Java 模式匹配器赋值

java - 第一个数据库桌面应用程序

java - 如何使用 HttpURLConnection 发送 HttpRequest?

java - com.opensymphony.workflow.loader.SpringWorkflowFactory 的位置?

c# - CSV行拆分成字符串数组问题

c# - 在 For 循环 C# 中将 int 附加到字符串或文本框名称的末尾

c++ - 使用SDL在后台播放MP3时产生声音效果

android - 如何将两个 mp3 音频文件混合/叠加到一个 mp3 文件中(不连接)