【问题标题】:escaping backslash in java string literal [duplicate]java字符串文字中的转义反斜杠[重复]
【发布时间】:2014-04-29 11:21:28
【问题描述】:

我在使用 Java 一段时间后遇到了这个问题: 我在窗口中使用硬编码路径,例如

"D:\Java-code\JavaProjects\workspace\eypros\src"

问题是我需要转义反斜杠字符才能将其与字符串一起使用。所以我手动转义每个反斜杠:

"D:\\Java-code\\JavaProjects\\workspace\\eypros\\src"

有没有办法自动采用未转义的路径并返回一个转义的 java 字符串。

我在想也许除了 java 字符串之外的另一个容器可以解决问题(但我不知道)。

有什么建议吗?

【问题讨论】:

  • 只使用正斜杠有什么缺点吗?
  • “采取”未转义的路径是什么意思?毕竟这只是在源代码中——如果你有用户输入,你就不需要转义它。
  • Andrei's answer 关于System.getProperty("file.separator"); 处理了许多与系统相关的问题,如果你走这条路(但不是全部),你会遇到这些问题。您是否有特殊原因要将程序锁定到 Windows?就我个人而言,我会将您所有的用户文件放在他们的主目录中,您可以在没有任何系统特定代码的情况下获得该目录
  • JAVA 接受正斜杠 / 作为跨平台文件分隔符。所以,在Windows平台上使用也是安全的。

标签: java string escaping backslash


【解决方案1】:
public static String escapePath(String path)
{
    return path.replace("\\", "\\\\");
}

\ 加倍,因为它也必须在这些字符串中进行转义。

无论如何,我认为你应该使用System.getProperty("file.separator"); 而不是\

java.io.File 也有一些对文件系统路径有用的方法。

【讨论】:

  • 这段代码可以正常工作。但是真的需要这段代码吗?只有在硬编码路径时才需要转义反斜杠。如果你是硬编码,那么无论如何你需要手动编码“\”...
  • 我不知道用户的用例。也许他正在从客户端可以修改的文件中读取这些路径。
  • 顺便说一句,如果你使用replaceAll而不是replace,它会给你一个错误。查看原因及解决方法(replaceAll("\\\\", "\\\\\\\\"))[这里][链接]:[链接][stackoverflow.com/questions/1701839/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2012-01-26
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多