android递归拆分字符串异常

时间:2014-08-21 06:50:18

标签: java android string recursion split

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

我真的很困惑,感觉就像逻辑本身在玩笑话。糟糕

您的任何反馈将不胜感激。

3 个答案:

答案 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));
}