使用愚蠢的错误+代替+
所有,我试图将输入路径中的所有" / +"转换为" /"简化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);
}
}
答案 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";