我有一个包含目录路径的字符串。字符串的值是从某个环境变量设置的。字符串中的斜杠数可能如下所示(如sysout中所示)。
String path = "C:\dirA\dirB\dirC"
或
String path = "C:\\dirA\\dirB\\dirC"
我期待\\
而不是\
。为此,我可以尝试path.replace('\','\\')
将第一个字符串转换为第二个字符串。但是,如果环境变量已经采用C:\\dirA\\dirB\\dirC
格式,那么path.replace()
会给我C:\\\\dirA\\\\dirB\\\\dirC
,我不希望这样。那么如何将\
替换为\\
并将现有的\\
保留在字符串中呢?
答案 0 :(得分:1)
您可以使用path.replaceAll('\\\\+','\\\\\\\\')
答案 1 :(得分:1)
在java源代码中,在双引号内,反斜杠是转义序列的开头,如\n
是换行符。反斜杠char本身写为\\
,但编译为单个反斜杠。
因此
String path = "C:\nA\nB\nC";
不是指目录nA,而是一个包含4行的字符串。
正确的是:
String path = "C:\\nA\\nB\\nC";
String path = "C:/nA/nB/nC";
第二个版本符合POSIX标准,兼容Linux和MacOS等。
您需要将错误的字符串修复为:
path = path.replace("\n", "\\n") // Line Feed (char)10
.replace("\r", "\\r") // Carriage return (char)13
.replace("\t", "\\t") // Tab (char)9
.replace("\f", "\\f"); // Form Feed (char)12
等等。像\u0041
('A'
)这样的数字序列不可能被重建。
在非java中你可以这样做:
path = path.replace("\\\\", "\\"); // Replace any double backslashes to one again.
path = path.replace("\\", "\\\\"); // Double all single backslashes.