Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android递归拆分字符串异常_Java_Android_String_Recursion_Split - Fatal编程技术网

Java android递归拆分字符串异常

Java android递归拆分字符串异常,java,android,string,recursion,split,Java,Android,String,Recursion,Split,android应用程序可以从SD卡加载绝对图像路径,如下所示/storage/sdcard0/DCIM/Camera/20130622_200703.jpg 我只需要部分路径字符串,如/20130622_200703.jpg 所以我想递归地将绝对路径分割成我需要的路径。我写的代码如下 public String splitPath(String path){ if (path == "") { return null; } if(path.indexOf

android应用程序可以从SD卡加载绝对图像路径,如下所示
/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
的值完全相同

我真的很困惑,这感觉就像是逻辑本身在跟我开玩笑。哎呀


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

您可以像这样轻松地使用
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:


您可以像这样轻松地使用
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:

使用

相反,因为没有理由从头开始分割它。

使用


取而代之的是,没有理由从一开始就将其拆分。

有很多方法可以做到这一点,包括您自己的代码的重写版本

// 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;
}
您可以对字符串执行
==
。永远不要那样做。假设您调用
splitPath(“a/b”)
,则跳过第一个if,第二个if不是,但在第二个if中,您使用子字符串执行某些操作,但从未返回它,最终只返回
path
。但是,一个简单的
返回就足够了:

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

有很多很多方法可以做到这一点,包括您自己的代码的重写版本

// 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;
}
您可以对字符串执行
==
。永远不要那样做。假设您调用
splitPath(“a/b”)
,则跳过第一个if,第二个if不是,但在第二个if中,您使用子字符串执行某些操作,但从未返回它,最终只返回
path
。但是,一个简单的
返回就足够了:

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

怎么样
“/”+新文件(路径).getName()?这能解决问题吗?保持干净整洁,考虑接受一个答案。<代码>“/”+新文件(PATH).GETNAMEL():<代码>?这不会解决问题吗?保持干净整洁,考虑接受一个答案。我希望我能在一开始就想到这个主意。省钱me@LoganGuo-你会的。。下一次:)我真希望我一开始就考虑过这个想法!省钱me@LoganGuo-你会的。。下一次:)如果可以的话,我想投票支持这个承诺一百万次。答案非常清楚,给了我很多启发。如果可以的话,我想投票支持这个承诺一百万次。答案非常清楚,给了我很多启发。