java 字符串操作,将多条斜线改为一条斜线

java String manipulation, change multiple slashes to one slash

愚蠢的错误是用+代替+

所有,我正在尝试转换所有“/+ "in input path to "/”以简化 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);
 }
}

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

替换

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

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

您是否尝试过使用 File.separator ... 这比 \ 或 / 更安全,因为 Linux 和 Windows 使用不同的文件分隔符。使用 File.separator 将使您的程序 运行 无论它在哪个平台上运行 运行,毕竟,这就是 JVM 的意义所在。 -- 正斜杠会起作用,但是,File.separator 会让您的最终用户更有信心这样做。 例如路径:"Test/World"

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

所以您希望将 //a//b//c 转换为 /a/b/c ?

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

应该就可以了。

如果实际上你想要 /+ -> / 转换,你需要转义 +,而不是 /

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