接着上一篇文章获取的编码后的URL地址,但是后边也避免不了
这一连串的数据
?Expires=1637911586&OSSAccessKeyId=TMP.3KjRewnmoU4wcLHa4q1J5JcDZ43q4wtVGiVwqWgwB1SPC4kvooe9kKAiLQSTikuCcY1spTwKw9ANTPgoAEvDor6eLfpywK&Signature=6fu02tzi8oyUtSDwIlngoXEW5sI%3D
?Expires后边的数据代表链接的有效时间,但是我们不需要后边这段数据,所以需要进行切割
所以需要在?Expires这进行切割
首先判断字段是否存在
不存在就需要切割了,就是没有有效时间限制的
boolean status = path.contains(str);
从第一个数据切割到出现?的位置
path.substring(0,path.indexOf("?"))
然后就会出现前边一段的数据
https://class-repository.oss-cn-xxx.xxx.com/4/%E8%B6%85%E9%9F%B3%E9%80%9F%E9%A3%9E%E8%A1%8C1.mp4
可是我需要后边这串编码的数据
然后再从后往前切割一段
path1.substring(path1.lastIndexOf("/")+1); //外网
就可以得到我们想要的结果了
%E8%B6%85%E9%9F%B3%E9%80%9F%E9%A3%9E%E8%A1%8C1.mp4
这段是没有有效时间的切割方式
从后往前切割
为啥+1是一位这个切割的获取值是前闭后开的[ 1 ,3);
path.substring(path.lastIndexOf("/") + 1, path.length());
最后附完整代码
public static String getSubToName(String path) {
String str = "?Expires";
boolean status = path.contains(str);
if(status){
String path1 =path.substring(0,path.indexOf("?"));
return path1.substring(path1.lastIndexOf("/")+1); //外网
}else {
return path.substring(path.lastIndexOf("/") + 1, path.length()); //内网
}
}