Android应用程序可以从sdcard加载绝对图像路径,看起来像/storage/sdcard0/DCIM/Camera/20130622_200703.jpg
我只需要部分路径字符串,如/20130622_200703.jpg
所以我想递归地将绝对路径分成我需要的路径。我写了如下代码
public String splitPath(String path){
if (path == "") {
return null;
}
if(path.indexOf("/") != -1){
String subPath = path.substring(path.indexOf("/") + 1);
//absoultePath = subPath;
splitPath(subPath);
}
return path;
}
但问题是当我在调试模式下执行该过程时。路径可以从/.../.../.../.../...
拆分为/...
,这是正确的,但即使path.indexOf("/")
等于-1
,路径也不会返回路径。
然后发生了奇怪的事情,递归循环没有结束,它继续逐步将/...
更改为/.../.../.../.../...
,在该过程之后,它返回了路径,这是完全相同的值比如/storage/sdcard0/DCIM/Camera/20130622_200703.jpg
。
我真的很困惑,感觉就像逻辑本身在玩笑话。糟糕
您的任何反馈将不胜感激。
答案 0 :(得分:3)
您可以像这样轻松使用split()
:
public static void main(String a[]) {
String s = "/storage/sdcard0/DCIM/Camera/20130622_200703.jpg";
String[] arr = s.split("/");
System.out.println(arr[arr.length - 1]);
}
O / P:
20130622_200703.jpg
答案 1 :(得分:1)
使用
String subPath = path.substring(path.lastIndexOf("/"));
因为没有理由从头开始分割它。
答案 2 :(得分:1)
许多方法都是这样做的,包括你自己代码的重写版本
// making use of lastIndexOf
String subPath = path.substring(path.lastIndexOf("/"));
// make use of file class
String subPath = new File(path).getName();
// make use of String split
String[] parts = path.split("/");
String subPath = parts[parts.length - 1];
// modification on your own code
public static String splitPath(String path) {
int index = path.indexOf("/");
if (index == -1)
return path;
else
return splitPath(path.substring(index + 1));
}
关于代码的注意事项
public String splitPath(String path){
if (path == "") {
return null;
}
if(path.indexOf("/") != -1){
String subPath = path.substring(path.indexOf("/") + 1);
splitPath(subPath);
}
return path;
}
你在{String}上==
。永远不要那样做。假设你调用splitPath("a/b")
,那么第一个if被跳过,第二个if不被,但是在第二个if中,你用subString执行某些操作,但从不返回它,最后只返回path
。但是,一个简单的return
就足够了:
if(path.indexOf("/") != -1){
String subPath = path.substring(path.indexOf("/") + 1);
return splitPath(subPath); //note the return.
}
return path;
结果是:
public String splitPath(String path) {
int index = path == null ? -1 : path.indexOf("/"); // null check
if (index != -1)
return splitPath(path.substring(index + 1));
return path;
//or :
// int index = path == null ? -1 : path.indexOf("/"); // null check
// return index == -1 ? path : splitPath(path.subString(index + 1));
}