【问题标题】:how to replace ' \' with '/' in a java string [duplicate]如何在java字符串中用'/'替换'\'[重复]
【发布时间】:2012-10-20 15:51:03
【问题描述】:

我已经生成了一个文件名并存储在一个字符串变量路径中 尝试过使用

path=path.replaceAll('\','/') 

但这不起作用

【问题讨论】:

  • 你必须用另一个 \ 来转义你的反斜杠。所以在路径中,使用 \\
  • 这很清楚,但也请发布您收到的任何错误消息以帮助我们找到答案;)
  • +1 以补偿不赞成票,因为我认为这是一个合理的问题,任何新手都可能被困。
  • 这个问题似乎不是我们大多数人第一次阅读后想到的“愚蠢的问题”。
  • @all 否决了第一名。请查看以下所有答案,包括我的答案,大多数答案都围绕这个问题感到困惑。因此,请在否决之前深入研究问题,而不是看它的简单性。问候

标签: java string


【解决方案1】:

replaceAll() 需要Strings 作为参数。 所以,如果你写

path = path.replaceAll('\', '/');

它失败了,因为你应该写

path = path.replaceAll("\", "/");

但这也失败了,因为字符'\'应该输入'\\'。

path = path.replaceAll("\\", "/");

这将在执行过程中失败,给你一个PatternSyntaxException,因为fisr String 是一个正则表达式(感谢@Bhavik Shah 指出)。所以,把它写成一个正则表达式,正如@jlordo 在他的回答中给出的那样:

path = path.replaceAll("\\\\", "/");

就是你要找的。​​p>

为了优化您的核心,您应该使其独立于操作系统,因此请使用@Thai Tran 的提示:

path = path.replaceAll("\\\\", File.separator);

但这无法抛出StringIndexOutOfBoundsException(我不知道为什么)。如果您使用不带正则表达式的 replace(),它会起作用:

path = path.replace("\\", File.separator);

【讨论】:

  • 这给出了 PatternSyntaxException
  • 没错,@Bhavik。谢谢。
  • 它适用于我:path.replaceAll("\\\\", File.separator);
  • 如果在Windows XP(西班牙语语言环境)下向我抛出了StringIndexOutOfBoundsException 异常。还是不知道为什么。
【解决方案2】:

因为它是一个文件路径,所以您完全不需要执行此操作。 Java 理解这两种语法。如果您尝试将文件转换为 URL 或 URI,它有方法可以做到这一点。

【讨论】:

    【解决方案3】:
       String s="m/j/"; 
       String strep="\\\\";
       String result=s.replaceAll("/", strep);
        System.out.println(result);
    

    【讨论】:

    • 这会解决你的问题...
    • 他的问题是他有一个像“m\j\”这样的字符串,想把它转换成“m/j/”。
    【解决方案4】:

    \ 不仅仅是 java 中的某个字符。

    有它的意义,有些字符在\前面有特殊含义,

    详情请参阅here 部分escape sequence

    因此,如果您只想在代码中使用\,则有一个实现\\

    所以替换

    path=path.replaceAll("\","/") 
    

    path=path.replaceAll("\\","/") 
    

    这会在执行过程中失败,给你一个PatternSyntaxException,因为第一个字符串是一个正则表达式所以基于@jlordo answer,这是要走的路

    path = path.replaceAll("\\\\", "/");
    

    【讨论】:

    • 它无法编译。 replaceAll() 需要字符串作为参数。
    • @J.A.I.L. ,是的,我是这样发布的,但在您发表评论之前对其进行了更新。谢谢你的信息
    • -1 ??答案有什么问题??? :-/
    • replaceAll 采用正则表达式,这将是 PatternSyntaxException...
    • @jlordo 是的,你是对的,我确实更新了答案。谢谢
    【解决方案5】:

    您的path=path.replaceAll('\','/'); 将无法编译,因为您必须转义反斜杠,

    使用path=path.replace('\\','/');(它将替换所有出现,参见JavaDoc)

    path=path.replaceAll("\\\\", "/");(此正则表达式转义反斜杠);-)

    在 cmets 中有一个解释,为什么需要 4 个“\”来为一个“\”生成正确的正则表达式。

    【讨论】:

    • docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/… 显示\` is a regular expression construct for backslash. Still dont understand why we need \\\`,解释一下
    • 是的,反斜杠也是正则表达式中的特殊字符。因此,在字符串中,这将是一个反斜杠:"\\",要在正则表达式中转义反斜杠,它必须以反斜杠开头,就像在字符串中一样,因此您需要两个反斜杠作为正则表达式中的一个反斜杠。两个反斜杠如下所示:"\\\\"。希望这能澄清一点
    • ahaaaan... 好吧.. 明白了.. 很酷.. 请使用此信息更新您的答案。谢谢
    • 感谢这个工作 path=path.replaceAll("\\\\","/")
    • @Java_Francis 很高兴我能帮上忙。请不要忘记将最佳答案标记为正确;)
    【解决方案6】:

    您应该使用replace 方法并转义反斜杠:

    path = path.replace('\\', '/');
    

    documentation:

    public String replace(char oldChar, char newChar)
    

    返回一个新字符串,该字符串由替换所有出现的 此字符串中的 oldChar 与 newChar。

    【讨论】:

    • 那不编译。你应该写replaceAll("\\",
    • 使用 [String.replace](docs.oracle.com/javase/7/docs/api/java/lang/…, char)) 它将替换所有字符,replaceAll 采用正则表达式,我看到一个 PatternSyntaxException 飞来飞去!
    【解决方案7】:

    如果是文件路径,你应该尝试“File.separator”而不是“\”(以防你的应用程序使用 Nix 平台)

    【讨论】:

    • +1 用于深入研究 OP 的问题并为未来的正确性提供最佳答案。
    • The way it should be,太好了。
    • 你可以编辑给出一个代码示例吗?
    • @Thai 有关如何使用它的示例代码?
    • 代码将完全取决于他创建变量“路径”的方式。如果他使用分隔符,则可以避免这种转义问题。草稿代码可以是:path = File.separator + "home" + File.separator + "user" + File.separator + "file.txt";
    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多