删除文件名中的非数字字符,但java

时间:2017-04-07 01:00:54

标签: java

我试图将file转换为String,之后我将替换转换后文件的名称而不使用非数字字符但是当我将其替换为文件扩展名时文件也被替换。例如(2014.05-06.txt -> 20140506.txt但发生的事情是20140506txt)我想保留.txt,.log或任何类型的扩展名。

String strDatefiles = Arrays.toString(saDateFiles).replaceAll("[\\W]", "");

编辑:

String[] saDateFiles = fileList.list();
String strDatefiles = Arrays.toString(saDateFiles.substring(0, saDateFiles.lastIndexOf("."))).replaceAll("[\\W]", "");     

saDateFiles.lastIndexOf(".")))错误替换为长度?

Edited2:

String[] saDateFiles = fileList.list();
String strDatefiles = Arrays.toString(saDateFiles).substring(0, Arrays.toString(saDateFiles).lastIndexOf(".")).replaceAll("[\\W]","");
System.out.println(strDatefiles);`  

输出:20140502txt20140904(我里面有2个文件)

2 个答案:

答案 0 :(得分:1)

我会将indexOf作为.中的最后一个String,然后操纵两个子串。例如,

String saDateFiles = "2014.05-06.txt";
int lastDot = saDateFiles.lastIndexOf('.');
String strDatefiles = saDateFiles.substring(0, lastDot).replaceAll("\\D", "")
        .concat(saDateFiles.substring(lastDot));
System.out.println(strDatefiles);

输出(根据要求)

20140506.txt

正如您所注意到的,上面是一个文件名。要对文件名数组执行此操作,可以使用for-each循环和上面的代码,如

String[] saDateFilesArr = fileList.list();
for (String saDateFiles : saDateFilesArr) {
    int lastDot = saDateFiles.lastIndexOf('.');
    String strDatefiles = saDateFiles.substring(0, lastDot)
            .replaceAll("\\D", "").concat(saDateFiles.substring(lastDot));
    System.out.println(strDatefiles);
}

答案 1 :(得分:0)

在"。"之前将替换功能应用于文件名的一部分。您可以使用以下代码提取此部分:

fileName.substring(0, fileName.lastIndexOf(".")) ;

使用:

String strDatefiles = Arrays.toString(saDateFiles.substring(0, saDateFiles.lastIndexOf("."))).replaceAll("[\\W]", "");
相关问题