【问题标题】:How to escape forward slash in java so that to use it in path如何在java中转义正斜杠以便在路径中使用它
【发布时间】:2014-08-29 20:23:55
【问题描述】:

我正在尝试转义字符串中的正斜杠,它可以在使用 Java 的路径中使用。
例如:String:: "Test/World"
现在我想使用上面的字符串路径。同时我必须确保"Test/World" 会在路径中出现。抱歉,如果它重复,但我找不到任何令人满意的解决方案。 我的目的是使用上面的字符串在 Zookeeper 中创建节点。
示例:
如果我使用以下字符串在 Zokkeeper 中创建节点,那么我应该将“测试/世界”作为单个节点而不是单独的。 Zookeeper 接受“/”作为路径分隔符,在某些情况下我不需要。 /zookeeper/HellowWorld/Test/World

谢谢

【问题讨论】:

标签: java hadoop apache-zookeeper


【解决方案1】:

为了在 Java 中转义字符,请使用“\” 例如:

String strPath = "directory\\file.txt".

我相信您不需要转义正斜杠,例如:“/”

【讨论】:

  • 你的想法是正确的。不过,最好包含source。 :)
  • 是的,我需要在 Zookeeper 和普通文件系统中使用这个路径。
【解决方案2】:

您应该知道File.separator ...这比\/ 更安全,因为Linux 和Windows 使用不同的文件分隔符。使用File.separator 将使您的程序无论运行在哪个平台上都可以运行,毕竟这就是JVM 的重点。 -- 正斜杠会起作用,但是,File.separator 会让您的最终用户更加相信它会起作用。

而你don't need to escape"/ ...你应该also see the answer to this question

String fileP = "Test" + File.separator + "World";

【讨论】:

  • 使用 File.Separator 还 Zookeeper 创建了 Test 和 World 作为两个独立的实体(作为路径的一部分)。我想要找到的是如何逃避它,以便我将节点作为“测试/世界”
  • 你试过了吗?我相信 File.Separator 会为您返回字符串...您是否尝试遍历路径的元素并连接到单个字符串?
  • 是的,我必须将它形成为单个字符串,否则它不会被 Zookeeper 接受为路径。是的,我试过你的方法。
  • 这里查看第二个例子,看看getResource()能不能帮到你qualitybrain.com/?p=3
【解决方案3】:

我对动物园管理员一无所知。但在我看来,您好像在尝试保留一个字符串列表,例如"zookeeper", "HellowWorld", "Test/World",然后您想使用它来创建 Zookeeper 节点在文件系统中创建路径名。 (我假设如果您正在使用文件系统,您将在 Test 子目录中拥有一个子目录 Test 和一个文件或子目录 World。如果您实际上是在尝试创建一个名为Test/World的文件或目录,放弃吧。Linux和Windows都会和你斗。)

如果是这种情况,请不要尝试将“路径”表示为您在程序中传递的简单String。相反,将其表示为String[]ArrayList<String>,然后仅在需要文件系统路径名时将其转换为文件系统路径名。或者,更好的是,使用getFilesystemPath 方法定义您自己的类。过早地将节点名称列表转换为路径名String,然后尝试稍后从String 重建列表,这是一种糟糕的方法,因为您丢弃了以后需要的数据(特别是,您正在丢弃离开有关哪些/ 字符是分隔符以及哪些是节点名称的一部分的信息。

编辑:如果您还需要 Zookeeper 的单个路径名,正如您在另一条评论中提到的那样,我无法帮助您,因为我不知道 Zookeeper 并且在快速浏览一下文档。如果有办法为 Zookeeper 转义斜线,那么我仍然建议使用getFilesystemPath 方法和getZookeeperPath 方法定义您自己的类,因为在某些情况下这两种方法可能会返回不同的Strings。该类将在内部将名称保留为数组或ArrayList

【讨论】:

    【解决方案4】:

    让我重新表述你的问题。您正在尝试在 zookeeper 中创建一个节点,它应该是 /zookeeper/HelloWorld/NodeName。但最后一部分“NodeName”实际上是“Test/World”,而您正在寻找转义“/”的方法,因此节点名称可以是“Test/World”。

    除非您尝试使用 unicode,否则我认为转义字符不会起作用。

    尝试 \u002F,它与 / 等效。

    【讨论】:

    • 我尝试过,但在 Zookeeper 级别,它将它作为“/”并形成单独的节点。
    • 有没有办法在创建后重命名节点?也许 / 可以用于重命名节点。
    • 这对我的情况进行了排序。我想写“n/a”并以“\”n\u002Fa\“”结束。谢谢。
    【解决方案5】:

    我们正在尝试解决完全相同的问题(在 zookeeper 中使用文件系统路径作为节点名称)我们还没有找到如何在节点名称中包含“/”的方法。

    解决方案是将“/”替换为某个字符,该字符不能出现在您的节点名称中。对于“/”或“\0”的路径,在这种情况下对我们没有帮助。

    其他可能性是用节点名称中允许的字符串替换“/”,例如"Test/World" -> "Test%@World", "Test%World" -> "Test%%World" 并在保存和加载中添加转义/反转义。

    如果有更直接的方法,我很想听听。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-11
      • 2012-07-10
      • 2018-10-01
      • 2020-11-20
      • 2015-06-13
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      相关资源
      最近更新 更多