如何在Java中用双斜杠安全地替换单斜杠,保持现有的双斜杠不变?

时间:2018-04-06 10:52:04

标签: java string replace

我有一个包含目录路径的字符串。字符串的值是从某个环境变量设置的。字符串中的斜杠数可能如下所示(如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,我不希望这样。那么如何将\替换为\\并将现有的\\保留在字符串中呢?

2 个答案:

答案 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.