首页 > 解决方案 > 使用嵌套目录将文件名转换为完整目录路径的优化方法用于大文件存储

问题描述

什么是优化的方法

1234567文件名转换为12//34//56//1234567.jpgjava.lang.

或者说

12.jpg -> 12.jpg
123.jpg -> 12//123.jpg
123456.jpg -> 12//34//123456.jpg

这样它就可以存储在该路径中。

标签: java

解决方案


您可以将正则表达式与replaceFirstreplaceAll类似使用:

String str = "1234567";
String path = str.replaceAll("(..)(..)(..).*", "$1//$2//$3//$0.jpg");
=> 12//34//56//1234567.jpg

如果你的意思是数字,你可以像这样替换你的正则表达式"(\\d{2})(\\d{2})(\\d{2}).*"


正则表达式演示


OP评论后编辑

在这种情况下,您可以使用像这样的流的解决方案:

String[] strs = {"1234567", "12345678"};
for (String str : strs) {
    String path = Arrays.stream(str.split("(?<=\\G.{2})"))
            .filter(s -> s.length() == 2)
            .collect(Collectors.joining("//"))
            .concat("//")
            .concat(str)
            .concat(".jpg");
    System.out.println(path);
}

输出

12//34//56//1234567.jpg
12//34//56//78//12345678.jpg

如果名称包含扩展名,您可以使用这种方式:

String[] strs = {"12.jpg", "123.jpg", "123456.jpg"};
for (String str : strs) {
    String path = Arrays.stream(str.substring(0, str.indexOf(".")).split("(?<=\\G.{2})"))
            .filter(s -> s.length() == 2)
            .collect(Collectors.joining("//"))
            .concat("//")
            .concat(str);
    System.out.println(path);
}

输出

12//12.jpg
12//123.jpg
12//34//56//123456.jpg

推荐阅读