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("/\+", "/"));
}
愚蠢的错误是用+代替+
所有,我正在尝试转换所有“/+ "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("/\+", "/"));
}