有了新的移动硬盘,于是一口气下了650集的海贼王,于是,需求来了。
虽然不是处女座,但也难以容忍600多集的海贼王一会儿这个命名格式,一会儿另一种命名格式。于是想到了自己是个IT人,于是想通过编程统一命名格式。
1,需求,要保留每一个文件的集数显示,但是要统一格式,主要有下面三种文件形式。
我们可以分析出,集数都是集中在一起作为文件名的一个连续字符串,于是想到通过获得收尾数字的位置,然后截取字符串,于是有了下面的方法。
public static String changeName2(String name) {
int m = 0, n = 0;
for (int i = 0; i < name.length(); i++) {
if (name.charAt(i) - '0' >= 0 && name.charAt(i) - '9' <= 0) {
m = i;
break;
}
}
for (int i = name.length() - 1; i >= 0; i--) {
if (name.charAt(i) - '0' >= 0 && name.charAt(i) - '9' <= 0) {
n = i;
break;
}
}
return name.substring(m, n + 1);
}
运行代码后发现了问题,有的文件格式是mp4格式的,mp4中的4影响了我截取集数,于是只要再上面方法中重新加了个判断,如果有mp4,于是给删了,新方法如下:
public static String changeName2(String name) {
if (name.contains("mp4")) {
name = name.replace("mp4", "");
}
int m = 0, n = 0;
for (int i = 0; i < name.length(); i++) {
if (name.charAt(i) - '0' >= 0 && name.charAt(i) - '9' <= 0) {
m = i;
break;
}
}
for (int i = name.length() - 1; i >= 0; i--) {
if (name.charAt(i) - '0' >= 0 && name.charAt(i) - '9' <= 0) {
n = i;
break;
}
}
return name.substring(m, n + 1);
}
2,重新运行了一遍,终于全部搞定,就是处女座也不要挑刺了。贴上全部代码。
package MyJava;
import java.io.File;
import java.util.ArrayList;
public class SunTest {
public static void main(String[] args) {
ArrayList fileNames = getFileNames();
for (String name : fileNames) {
System.out.println(name);
}
}
/**
* 得到所有文件的文件名
*
* @return
*/
public static ArrayList getFileNames() {
ArrayList nameList = new ArrayList();
File mydir = new File("H://onepiece");
File[] listFiles = mydir.listFiles();
for (File file : listFiles) {
String filename = file.getName();
filename = changeName2(filename);
boolean result = file.renameTo(new File("H://onepiece",
"[one_piece-海贼王][" + filename + "].rmvb"));
System.out.println(result);
nameList.add(file.getName());
}
return nameList;
}
/**
* 输入文件名,返回需要的集数字符串
*
* @param name
* @return
*/
public static String changeName2(String name) {
if (name.contains("mp4")) {
name = name.replace("mp4", "");
}
int m = 0, n = 0;
for (int i = 0; i < name.length(); i++) {
if (name.charAt(i) - '0' >= 0 && name.charAt(i) - '9' <= 0) {
m = i;
break;
}
}
for (int i = name.length() - 1; i >= 0; i--) {
if (name.charAt(i) - '0' >= 0 && name.charAt(i) - '9' <= 0) {
n = i;
break;
}
}
return name.substring(m, n + 1);
}
}
3,其实代码没什么难度,原先我是打算一个个改的,但现在能学以致用心里还是很舒服的。敲代码,不只是为了生活,还应该是一种。贴上效果图一张。