java - 使用嵌套目录将文件名转换为完整目录路径的优化方法用于大文件存储
问题描述
什么是优化的方法
将1234567
文件名转换为12//34//56//1234567.jpg
java.lang.
或者说
12.jpg -> 12.jpg
123.jpg -> 12//123.jpg
123456.jpg -> 12//34//123456.jpg
这样它就可以存储在该路径中。
解决方案
您可以将正则表达式与replaceFirst
或replaceAll
类似使用:
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
推荐阅读
- sql-server - 如何显示两个日期之间的日期
- java - 获取亚马逊页面和产品信息的最佳方式
- django - django分析没有模型的文件的heroku限制?
- laravel - 使用外部 Laravel 护照流明 api 进行 Laravel 客户端身份验证
- ruby-on-rails - 在 Ruby on Rails 中更新数据库临时版本时,最好的方法是什么?
- spring-boot - Spring Boot 部署:创建在类路径资源中定义的名称为“entityManagerFactory”的 bean 时出错
- excel - Excel:当有动态数据时如何计算 24 小时内的百分比(超过 24 小时)
- r - 生成相关变量
- c# - 启动/退出 Android.Provider.Settings 活动时如何处理动画?
- python - Python套接字和线程不会收到消息