java字符串操作,将多个斜杠更改为一个斜杠

时间:2015-12-09 09:09:59

标签: java string replaceall

使用愚蠢的错误+代替+

所有,我试图将输入路径中的所有" / +"转换为" /"简化unix风格的路径。

 path.replaceAll( "/+", "/"); 
 path.replaceAll( "\\/+", "/"); 

结果没有做任何事情,这样做的正确方法是什么?

public class SimplifyPath {
public String simplifyPath(String path) {
    Stack<String> direc = new Stack<String> ();
    path = path.replaceAll("/+", "/");
    System.out.println("now path becomes " + path);  // here path remains "///"

    int i = 0;
    while (i < path.length() - 1) {
        int slash = path.indexOf("/", i + 1);
        if (slash == -1) break;
        String tmp = path.substring(i, slash);
        if (tmp.equals("/.")){
            continue;
        } else if (tmp.equals("/..")) {
            if (! direc.empty()){
                direc.pop();
            }
            return "/";
        } else {
            direc.push(tmp);
        }
        i = slash;
    }
    if (direc.empty()) return "/";
    String ans = "";
    while (!direc.empty()) {
        ans = direc.pop() + ans;
    }
    return ans;
}

public static void main(String[] args){
    String input = "///";
    SimplifyPath test = new SimplifyPath();
    test.simplifyPath(input);
 }
}

3 个答案:

答案 0 :(得分:6)

您正在使用,而不是+。这是一个不同的角色。

替换

path = path.replaceAll("/+", "/");

path = path.replaceAll("/+", "/");

答案 1 :(得分:0)

所以你想要// a // b // c转换为/ a / b / c?

public static void main(String[] args) {
    String x = "///a//b//c";
    System.out.println(x.replaceAll("/+", "/"));
}

应该诀窍。

如果实际上你想要/ + - &gt; /转换你需要逃避+,而不是/

public static void main(String[] args) {
    String x = "/+/+/a//b/+/c";
    System.out.println(x.replaceAll("/\\+", "/"));
}

答案 2 :(得分:-1)

您是否尝试过使用File.separator ...这比\或/更安全,因为Linux和Windows使用不同的文件分隔符。使用File.separator将使程序运行,无论它运行的平台如何,毕竟,这是JVM的重点。 - 正斜杠可以工作,但是,File.separator会让你对最终用户更有信心。 例如路径:&#34;测试/世界&#34;

String fileP = "Test" + File.separator + "World";